我想像这样生成observe块:
created: function () {
var viewData = {
type: 'Pikachu',
name: 'Gary'
};
// iterate over view data
for (prop in viewData) {
//set the property
this[prop] = viewData[prop];
var handlerName = 'update' + prop
// set add the property to the observe block
this.observe[prop] = handlerName;
// set the handler
this[handlerName] = function (valueWas, valueIs) {
console.log('you have changed ' + prop + ' to ' valueIs);
};
}
},
这可能吗?
这对我来说完全没有反应,没有错误,但处理程序没有被调用。
答案 0 :(得分:1)
你错过了一些奥秘。在最终确定原型之前,polymer-element
代码将observe
映射分解为并行数组,作为(非常恼人的)速度优化。
您可以致电:
重新优化您的实例 this.element.optimizePropertyMaps(this);
this.element
指的是定义当前元素类型的polymer-element
(fwiw,已知element
是此属性的错误名称。)
以下是一个例子:
http://jsbin.com/tahixumu/4/edit
同样为了提高性能,Polymer认为观察者和其他特殊列表是共享原型的特征。由于您的动态数据可能是 per-instance ,因此我必须使您的示例更复杂,才能进行正确的测试。
请注意,由于破坏了Polymer对每个原型的期望,可能会出现其他复杂情况。