首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么Polmyer iron-ajax不会在params更改时自动请求?

为什么Polmyer iron-ajax不会在params更改时自动请求?
EN

Stack Overflow用户
提问于 2015-09-09 02:13:33
回答 2查看 2.1K关注 0票数 0

HTML

代码语言:javascript
复制
<iron-ajax auto id="ajaxWeapons"
                 verbose="true"
                 url="[[api.items.url]]"
                 params="[[api.items.params]]"
                 debounce-duration="100"
                 handle-as="json"
                 last-response="{{items}}"></iron-ajax>

脚本

代码语言:javascript
复制
app.view = 'category';
app.api.items.params.page = page;
app.api.items.params.category = this.categories.find((v)=>v.code === category).id;

it只会请求一次,但是当我更改params.category时,它不会再次请求,我该怎么办?

编辑

如果我做了app.set('api.weapons.params',{size:18,category:1}),iron会再次请求,app.set('api.weapons.params.category',1)不会.

更新

我尝试使用计算绑定来解决这个问题。

HTML

代码语言:javascript
复制
      <iron-ajax auto id="ajaxWeapons"
                 verbose="true"
                 url="[[api.weapons.url]]"
                 params="{{getParams(api.weapons.params,api.weapons.params.size,api.weapons.params.category)}}"
                 debounce-duration="100"
                 handle-as="json"
                 last-response="{{weapons}}"></iron-ajax>

剧本

代码语言:javascript
复制
app.getParams = function (params) {
    console.log('Do params ', params);
    return this.extend({}, params);
};

但这不是预期的工作,getParams从来没有被调用过,甚至api.weapons.params,api.weapons.params.size,api.weapons.params.category都是!= undefined

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-09-09 04:37:43

params对象没有收到子更改的通知,正如您所知,setnotifyPath没有解决这个问题。

目前,让这个场景工作的唯一方法是在param更改后直接调用generateRequest

代码语言:javascript
复制
this.$.ajaxWeapons.generateRequest();

为了在需要时动态调用它,您可以添加一个观察者:

代码语言:javascript
复制
observers: {
  '_testParamsChanged(testParams.*)'
},

_testParamsChanged: function(changeRecord) {
  this.$.ajaxWeapons.generateRequest();
}
票数 1
EN

Stack Overflow用户

发布于 2015-09-09 14:03:07

我认为你应该使用双向数据绑定。聚合物文献说:

方括号([[]])创建单向绑定。数据流是向下的,主机到子的,并且绑定从不修改主机属性。 花括号({{}})创建自动绑定。数据流是单向的还是双向的,这取决于目标属性是否配置为双向绑定。

因此,我认为您的代码应该如下所示:

代码语言:javascript
复制
<iron-ajax auto id="ajaxWeapons"
             verbose="true"
             url="{{api.items.url}}"
             params="{{api.items.params}}"
             debounce-duration="100"
             handle-as="json"
             last-response="{{items}}"></iron-ajax>

甚至,您可能需要使用观察者来通知对象属性的更改。这里,您可以找到一个观察路径更改的示例。

编辑

来自<iron-ajax> 文档

如果自动设置为true,则元素将在其url、params或body属性发生更改时执行请求。在多个属性被顺序更改的情况下,自动生成的请求将被取消。 注释: params属性必须是双引号JSON.JSONJSON.JSON.JSON备注:属性必须是双引号的. 可以通过调用元素上的generateRequest来显式地触发请求。

这就是为什么'app.set (‘api.weapons.params.category ',1)’不能工作的原因。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32469895

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档