Polymer dom-bind 模板中兄弟元素之间的数据绑定

Data binding between sibling elements in a Polymer dom-bind template

我有一个包含两个元素的 <dom-bind> 模板 - 一个是按钮,另一个是列表。当列表正在加载时(它的 loading 属性 是 true),按钮 active 属性 应该设置为 false,反之亦然.

我无法让它们之间的绑定生效。当然我可以从整个事物中创建一个新元素,但如果可能的话我宁愿避免它。

这是我的 <dom-bind> 模板:

<dom-bind id="messageListScreen">
    <template>
        <paper-progress-button on-click="fetchNewMessages" active="[[!loading]]" active-text="Refresh" inactive-text="Refreshing..." raised></paper-progress-button>
        <message-grid id="grid" loading="{{loading}}"></message-grid>
    </template>
</dom-bind>

使用上面的代码,没有任何反应。如果我这样做

<script>
    document.addEventListener("WebComponentsReady", function(event){
        let self = document.getElementById('messageListScreen');
        self.loading = self.$.grid.loading;
    });
</script>

self.loading确实得到了grid.loading的值,但是当grid.loading的值改变时,self.loading的值保持不变。

有什么方法可以使用 <dom-bind>grid.loading 的值绑定到 <paper-progress-button>active 属性 吗?

你应该使用双向绑定。

notify:true 添加到 message-grid 中的 loading 属性,并通过 this.set('loading', false)(而不是 this.loading = falsemessage-grid 中设置加载).

您也应该在 messageListScreen 中有一个名为 loading 的 属性。你可能有,你不需要它,但它对文档很有帮助。


另一件事是布尔属性如果存在则始终为真,因此无论属性具有什么值(真||假),在这两种情况下加载都将始终为真。将布尔值改为数字 (int),其中 1 为真,0 为假。