是否可以在运行时发布新的Polymer组件属性?
<polymer-element name="dynamic-attributes">
<template></template>
<script>
Polymer('dynamic-attributes', {
ready: function(){
var attributes = new Thing().getAttributes();
this.publishAttributes(attributes); // imaginary method
},
});
</script>
</polymer-element>
更多信息......
我正在编写一个包装Seriously.js的组件库。
以下是理想实施的示例。
<seriously-graph linear>
<seriously-source>
<img src="images/pencils.jpg">
</seriously-source>
<seriously-effect type="pixelate" pixelSize="{{pixelSize}}"></seriously-effect>
<seriously-effect type="blur" amount=".5"></seriously-effect>
<seriously-target width="411" height="425"></seriously-target>
</seriously-graph>
我有一个使用MutationObserver来检测属性更改的变通方法。它工作,但后来我必须找到序列化的解决方案,并使属性getter / setter。感觉就像我正在重新发明轮子(聚合物),并希望有一种内置的方法来做到这一点。
答案 0 :(得分:1)
这是一个Gist,可以满足您的需求。基本上,它会在第一次使用时动态创建具体 <polymer-element>
,然后使用动态创建的具体<交换通用实例/ em>一,复制过程中的任何绑定声明。来源是:
<seriously-effect type="blur" amount="{{someAmount}}"></seriously-effect>
但是使用Inspect Element,你会看到:
<seriously-effect-blur amount="{{someAmount}}"></seriously-effect-blur>
答案 1 :(得分:0)
是的,可以通过为发布节点分配属性对象来实现。有关详细信息,请参阅https://www.polymer-project.org/docs/polymer/polymer.html#attributes。
您的方法必须返回属性对象:
Polymer('dynamic-attributes', {
publish: (new Thing()).getAttributes() || {}
});
答案 2 :(得分:0)
也许你可以创建一个全局数组并将其用作属性?
<polymer-element name="app-globals" attributes="values">
<script>
(function() {
var values = {};
Polymer({
ready: function() {
this.values = values;
for (var i = 0; i < this.attributes.length; ++i) {
var attr = this.attributes[i];
values[attr.nodeName] = attr.value;
}
}
});
})();
</script>
</polymer-element>
<app-globals id='myDynamicFunctions' someFunction someOtherFunction></app-globals>
<script>
//then define it
document.$.myDynamicFunctions.values.someFunction = function(){...}
</script>
我不太确定你在寻找什么,这可能会给你一个暗示......