[英]How to trigger observer on child element when nested in dom-if Polymer
我试图在子 Polymer 元素中检索更新的数据,但数据仍然绑定到初始化值。
家长
<template is="dom-if" if="[[items.0]]">
<child-el id="id_0" id-item="[[items.0.idItem]]"></child-el>
</template>
...
_updateChild () {
if (this.items[0]) {
this.shadowRoot.getElementById('id_0').idItem = this.items[0].idItem;
this.shadowRoot.getElementById('id_0').idItem.notifyPath;
}
}
孩子
<iron-ajax id="ajax"
handle-as="json"
last-response="{{data}}"
method="get"
on-error="_onError"
url="https://api.com/item-price">
</iron-ajax>
<div>
<p id="price">[[price(data.price)]]</p>
</div>
...
static get properties() {
return {
idItem: { type: String, observer: 'getResponse' }
}
}
getResponse() {
let request = this.$.ajax.generateRequest();
request.completes.then(req => {
this.idItem = null;
})
}
price(amt) {
return amt
}
更新的价格执行,但在idItem
设置,但在观察者idItem
“ getResponse()
”不执行,并结合data.price
。
如何让这些事件正确级联,以便每次items.0.idItem
更改child-eel
上的绑定this.data.price
都会更新?
items.0.idItem 是如何改变的?
尝试像这样更改 idItem this.set('items.0.idItem', 100)
通常,重新触发除使用dom-if
视图之外的其他内容是不好的,除非您不在其上使用restamp
属性( https://polymer-library.polymer-project.org/3.0/api/elements/dom-if# DomIf-property-restamp )
您的方法似乎有点棘手,因为在请求完成后,您将观察到的属性更改为null
getResponse() {
let request = this.$.ajax.generateRequest();
request.completes.then(req => {
this.idItem = null;
})
}
它更改为空应导致再次重新触发观察者。 但是会发生什么,你只是再次听回调,而不重新触发ajax request 。
iron-ajax
有一个名为generateRequest()
方法,如果您没有将auto
属性设置为iron-ajax
组件并且不更改该组件的参数,则您可能应该使用它(请参阅https://www.webcomponents.org /element/@polymer/iron-ajax/elements/iron-ajax#property-auto )
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.