Polymer readOnly访问给定属性

时间:2016-09-26 19:57:53

标签: javascript properties polymer-1.0 readonly

我知道您可以使用生成的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属性。

如果我完全放弃这个并走另一条路,我也会接受这个建议。

更新2

我缺乏更好的解决方案是放弃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));
        }
    }
},

0 个答案:

没有答案