【发布时间】:2016-04-22 13:42:35
【问题描述】:
我有一个生成表格行的dom-repeat 模板,其中一个行单元格包含一个按钮,当行值具有特定值时,我希望禁用该按钮。所以我的组件有这段代码,它使用计算绑定来设置按钮的 disabled 属性的值:
<template is="dom-repeat" items="{{list}}" as="ticket">
<tr class$="{{ticket.status}}">
<td class="actions">
<paper-icon-button icon="add" on-tap="incTickets"
disabled="{{noAvailableTickets(ticket)}}">
</paper-icon-button>
</td>
<td>[[ticket.amount]]</td>
<td>[[ticket.event.title]]</td>
</tr>
</template>
在我的代码中我有这个方法:
noAvailableTickets : function(ticket) {
return ticket.event.available_tickets <= 0;
}
我可以看到第一次创建列表时调用了计算绑定方法,每个项目一次。
然后当我更新项目时,像这样:
this.set('list.' + ind + '.amount', newamount);
不会重新计算计算的绑定,也不会再次调用该方法,即使我可以在模板中的 ticket.amount 显示中看到值实际上发生了变化。
Polymer Data Binding entry in the developer's guide 对计算绑定有这样的说法:
[...] 属性绑定到
computeFullName的返回值,每当第一次或最后一次更改时都会重新计算该值。 [first和last是computeFullName的声明参数]
因此,假设计算绑定不知道对象值、其amount 属性以及其他逻辑如何使用它来更新available_tickets 属性之间的相关性,我尝试添加@987654334带有完整更新对象的@命令,如下所示:
this.notifyPath('list.' + displayId, ticket);
但这似乎没有任何效果。我错过了什么?
【问题讨论】:
-
我知道这个问题已经得到解答,但您是否考虑过使用
this.push('path', value)而不是this.set? -
push添加到数组中,但我不想添加其他项,只需更新现有项即可。
标签: javascript polymer web-component