我知道您可以使用生成的setter设置readOnly属性:_setMyProp(newValue)
但如果我事先不知道该物业的名称怎么办?有没有办法访问给定属性的setter?我目前的解决方案是将属性名称映射到其setter函数:
_setters: {
type: Object,
value: {
prop1 : function(newVal) { this._setProp1(newVal); },
prop2 : function(newVal) { this._setProp2(newVal); }
}
}
有更优雅的方法吗?
有关更多上下文,这是调用_setters的函数。理想情况下,此函数不应使用任何实际的属性名称。这就是我所说的“不知道事前的财产名称”
load: function(data, key) {
if (!_.isEmpty(data)) {
if (key) {
this._setters[key].bind(this)(data);
} else {
_.each(this._setters, function(setter, key) {
setter.bind(this)(data[key]);
}.bind(this));
}
}
},
该元素的行为类似于iron-meta,并在全局对象准备就绪时从其中加载数据,并设置其所有属性。
ready: function() {
this.load(_data);
},
但是,当ajax响应进入时,它还必须为每个附加元素加载特定属性。
_els.forEach(function(el) {
el.load(key, _data[key]);
});
我试图让以后尽可能简单地定义更多属性。 Polymer的this.set('propName', 'value');
将是完美的,但不适用于readOnly属性。
如果我完全放弃这个并走另一条路,我也会接受这个建议。
我缺乏更好的解决方案是放弃readOnly
并使用this.set
这就是load
现在的样子:
load: function(data, property) {
if (!_.isEmpty(data)) {
if (property) {
this.set(property, data[property]);
} else {
Object.keys(this.properties).forEach(function(property) {
this.set(property, data[property]);
}.bind(this));
}
}
},