HTML
<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>脚本
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
<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>剧本
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。
发布于 2015-09-09 04:37:43
params对象没有收到子更改的通知,正如您所知,set或notifyPath没有解决这个问题。
目前,让这个场景工作的唯一方法是在param更改后直接调用generateRequest。
this.$.ajaxWeapons.generateRequest();为了在需要时动态调用它,您可以添加一个观察者:
observers: {
'_testParamsChanged(testParams.*)'
},
_testParamsChanged: function(changeRecord) {
this.$.ajaxWeapons.generateRequest();
}发布于 2015-09-09 14:03:07
我认为你应该使用双向数据绑定。聚合物文献说:
方括号([[]])创建单向绑定。数据流是向下的,主机到子的,并且绑定从不修改主机属性。 花括号({{}})创建自动绑定。数据流是单向的还是双向的,这取决于目标属性是否配置为双向绑定。
因此,我认为您的代码应该如下所示:
<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)’不能工作的原因。
https://stackoverflow.com/questions/32469895
复制相似问题