如何生成观察块

时间:2014-03-16 04:36:27

标签: javascript polymer

我想像这样生成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);
                };
            }
        },

这可能吗?

这对我来说完全没有反应,没有错误,但处理程序没有被调用。

1 个答案:

答案 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对每个原型的期望,可能会出现其他复杂情况。