首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在聚合物中动态发布属性

在聚合物中动态发布属性
EN

Stack Overflow用户
提问于 2015-02-14 19:13:13
回答 3查看 944关注 0票数 1

是否有可能在运行时发布新的聚合物组件属性?

代码语言:javascript
复制
<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的组件库。

以下是理想实现的一个示例。

代码语言:javascript
复制
<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/setters。这感觉就像我在重新发明轮子(聚合物),并希望有一个内置的方法来做到这一点。

EN

回答 3

Stack Overflow用户

发布于 2015-02-25 18:55:57

这是一个要旨,它做你要找的东西。基本上,它在第一次使用时会动态地创建一个具体的<polymer-element>,然后用动态创建的具体实例交换泛型实例,复制过程中的任何绑定声明。消息来源将是:

代码语言:javascript
复制
<seriously-effect type="blur" amount="{{someAmount}}"></seriously-effect>

但是有了检查元素,你会发现:

代码语言:javascript
复制
<seriously-effect-blur amount="{{someAmount}}"></seriously-effect-blur>
票数 1
EN

Stack Overflow用户

发布于 2015-02-14 20:18:34

是的,通过为发布节点分配属性对象是可能的。详情请参见https://www.polymer-project.org/docs/polymer/polymer.html#attributes

您的方法必须返回一个属性对象:

代码语言:javascript
复制
Polymer('dynamic-attributes', {
  publish: (new Thing()).getAttributes() || {}
});
票数 0
EN

Stack Overflow用户

发布于 2015-02-24 12:40:29

也许您可以创建一个全局数组并将其用作属性?

代码语言:javascript
复制
<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>

我不太清楚你在找什么,这可能会给你一个提示.

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28519217

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档