Polymer 1.0 观察者 - 不适用于数组
Polymer 1.0 observers - not working on array
我设置了一个观察器来捕捉数组 属性 上的所有聚合物识别事件,但我捕捉到它来捕捉变化。在我下面的示例中,我的观察者函数 "bigup" 仅在 属性、"bigs" 首次初始化时被调用。
<dom-module id="parent-page">
<template>
<paper-button on-click="updateAll">Update</paper-button>
</template>
<script>
var temp=[];
temp.push({'conversation':[{'message':'hello'}]});
Polymer({
is: 'parent-page',
properties: {
bigs: {
type: Array,
value: temp
}
},
observers: [
'bigup(bigs.*)'
],
updateAll: function(){
this.bigs.push({'conversation':[{'message':'hola'}]});
console.dir(this.bigs);
},
bigup: function(){
console.log('big Up');
}
});
</script>
我也尝试在观察者中使用bigs.push但没有成功。我不明白的一部分是,如果我将以下行添加到我的 "updateAll" 函数中,观察者会捕捉到变化并触发 "bigup".
this.bigs=[];
您需要使用 Polymer 中的 push
方法,而不是 this.bigs.push
。
所以用
替换那行代码
this.push('bigs', {'conversation':[{'message':'hola'}]});
有关详细信息,请查看此 link。
对我来说this article也很有帮助,它涵盖了注册观察者的方式以及 Justin XL 建议的拼接方法。
正在注册观察者:
properties: {
users: {
type: Array,
value: function() {
return [];
}
}
},
observers: [
'usersAddedOrRemoved(users.splices)'
],
调用 Polymer 1.0 方式的拼接方法:
this.push('users', 'TestUser');
https://www.polymer-project.org/1.0/docs/devguide/properties.html#array-observation
仅供参考 - 这并非在所有情况下都有效(我最初的想法)
当您像这样在 属性 声明中注册观察者时:
properties: {
users: {
type: Array,
value: function() {
return [];
},
observer: 'usersAddedOrRemoved'
}
},
在这种情况下,usersAddedOrRemoved
方法仅在您将新数组分配给用户对象时调用。但是,当您通过压入、弹出、拼接等方式改变数组时,它不会触发。
我设置了一个观察器来捕捉数组 属性 上的所有聚合物识别事件,但我捕捉到它来捕捉变化。在我下面的示例中,我的观察者函数 "bigup" 仅在 属性、"bigs" 首次初始化时被调用。
<dom-module id="parent-page">
<template>
<paper-button on-click="updateAll">Update</paper-button>
</template>
<script>
var temp=[];
temp.push({'conversation':[{'message':'hello'}]});
Polymer({
is: 'parent-page',
properties: {
bigs: {
type: Array,
value: temp
}
},
observers: [
'bigup(bigs.*)'
],
updateAll: function(){
this.bigs.push({'conversation':[{'message':'hola'}]});
console.dir(this.bigs);
},
bigup: function(){
console.log('big Up');
}
});
</script>
我也尝试在观察者中使用bigs.push但没有成功。我不明白的一部分是,如果我将以下行添加到我的 "updateAll" 函数中,观察者会捕捉到变化并触发 "bigup".
this.bigs=[];
您需要使用 Polymer 中的 push
方法,而不是 this.bigs.push
。
所以用
替换那行代码this.push('bigs', {'conversation':[{'message':'hola'}]});
有关详细信息,请查看此 link。
对我来说this article也很有帮助,它涵盖了注册观察者的方式以及 Justin XL 建议的拼接方法。
正在注册观察者:
properties: {
users: {
type: Array,
value: function() {
return [];
}
}
},
observers: [
'usersAddedOrRemoved(users.splices)'
],
调用 Polymer 1.0 方式的拼接方法:
this.push('users', 'TestUser');
https://www.polymer-project.org/1.0/docs/devguide/properties.html#array-observation
仅供参考 - 这并非在所有情况下都有效(我最初的想法) 当您像这样在 属性 声明中注册观察者时:
properties: {
users: {
type: Array,
value: function() {
return [];
},
observer: 'usersAddedOrRemoved'
}
},
在这种情况下,usersAddedOrRemoved
方法仅在您将新数组分配给用户对象时调用。但是,当您通过压入、弹出、拼接等方式改变数组时,它不会触发。