我有以下聚合物元素:
调用someMethod后,navigator.currentStep的值不会更新。
<dom-module id="m">
<template>
Navigator step = <span>{{navigator.currentStep}}</span>
</template>
</dom-module>
Polymer({
is: 'm',
ready: function() {
this.navigator = new Navigator(1);
console.log(this.navigator.currentStep); // 1
},
someMethod: function() {
this.navigator.next();
console.log(this.navigator.currentStep); // 2
}
});
输出始终为
导航器步骤= 1
但以下作品
<dom-module id="m">
<template>
Navigator step = <span>{{currentStep}}</span>
</template>
</dom-module>
Polymer({
is: 'm',
ready: function() {
this.navigator = new Navigator(1);
this.currentStep = this.navigator.currentStep; // 1
},
someMethod: function() {
this.navigator.next();
this.currentStep = this.navigator.currentStep; // 2
}
});
答案 0 :(得分:3)
致电this.notifyPath('navigator.currentStep', this.navigator.currentStep)
。
请参阅https://www.polymer-project.org/1.0/docs/devguide/data-binding.html#set-path。
有时,命令式代码需要直接更改对象的子属性。由于我们避免使用更复杂的观察机制(如Object.observe或脏检查)以便为最常见的用例实现跨平台的最佳启动和运行时性能,因此直接更改对象的子属性需要用户的协作。 / p>
具体来说,Polymer提供了两个API,允许将这些更改通知给系统:
notifyPath(path, value)
和set(path, value)
,其中path是标识路径的字符串(相对于主机元素)。