0

我正在尝试检索子 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设置,但idItemgetResponse()”上的观察者不执行并绑定到data.price.

如何让这些事件正确级联,以便每次items.0.idItem更改绑定上的child-eel this.data.price更新?

4

2 回答 2

0

通常,dom-if除非您不使用restamp属性(https://polymer-library.polymer-project.org/3.0/api/elements/dom-if#DomIf-property-重印

您的方法似乎有点棘手,因为请求完成后,您将观察到的属性更改为null

getResponse() {
  let request = this.$.ajax.generateRequest();
  request.completes.then(req => {
    this.idItem = null;
  })
}

将其更改为 null 应该会导致再次触发观察者。但是会发生什么,你只是再次监听回调,而不重新触发ajax 请求

iron-ajax有方法调用generateRequest(),你可能应该使用它,如果你没有将auto属性设置为iron-ajax组件并且不更改此组件的参数(请参阅https://www.webcomponents.org/element/@polymer/iron-ajax/元素/铁阿贾克斯#property-auto )

于 2020-03-30T00:29:52.570 回答
0

items.0.idItem 是如何改变的?

尝试像这样更改 idItemthis.set('items.0.idItem', 100)

于 2020-03-25T21:53:53.423 回答