polymer - 如何将所需属性传递给元素构造函数

标签 polymer

我有一个像这样的 polymer 自定义元素

<script src="http://www.polymer-project.org/platform.js"></script>
<script src="http://www.polymer-project.org/polymer.js"></script>

<polymer-element name="my-foo" constructor="MyFoo" attributes="controller" noscript>
    <template>
      hello from {{options.name}}
    </template>
    <script>
      Polymer({
        get options() {
          return this.controller.options;
        }
      });
    </script>
</polymer>

<div id="container"></div>

<script>
  document.addEventListener('polymer-ready',function() {
    var foo = new MyFoo();
    foo.controller = {
        options : {
            name : "here"
       }
    };
    document.body.appendChild(foo);
  });
</script>

属性“controller”应该是一个具有对象类型属性“options”的对象。

我可以使用

创建自定义元素的实例
var foo = new Foo();

但我无法设置属性“ Controller ”,这会导致错误:

Uncaught TypeError: Cannot read property 'options' of undefined.

当然 - 我可以修改 polymer 组件中的选项 setter/getter 以实现故障安全,如下所示:

...
get options() {
    return this.controller ? this.controller.options : null;
}
...

但在这种情况下,自定义元素也无法识别所应用的数据。

最后一个问题:如何将必需的属性传递给自定义元素构造函数?

最佳答案

一种解决方案是使用计算属性:

<script src="http://www.polymer-project.org/components/platform/platform.js"></script>
<link rel='import' href='http://www.polymer-project.org/components/polymer/polymer.html'>

<polymer-element name="my-foo" constructor="MyFoo" attributes="controller" noscript>
    <template>
      hello from {{options.name}}
    </template>
    <script>
      Polymer({
        computed: {
          options: 'controller.options'
        }
      });
    </script>
</polymer-element>

<script>
  document.addEventListener('polymer-ready',function() {
    var foo = new MyFoo();
    document.body.appendChild(foo);
    foo.controller = {
      options : {
        name : "here"
      }
    }
  });
</script>

您甚至可以使计算属性只是对方法的调用。关键是,通过这样做,Polymer 可以知道何时检查 options 是否已更改,因为它知道计算 options 所需的输入。

Polymer({
  computed: {
    options: 'getOptions(controller)'
  },
  getOptions: function(controller) {
    return controller ? controller.options : null;
  }
});

关于polymer - 如何将所需属性传递给元素构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26141037/

相关文章:

dart - 在Dart中添加事件监听器以获取 polymer 中的事件

javascript - 访问 Polymer dom-repeat 模板中的元素

javascript - 我可以通过标准 Javascript 应用程序使用 Google Polymer 吗?

javascript - 另一个元件内的 polymer 芯板

使用 Polymer 1.0 的 typescript ?

css - 如何在 Polymer 中将 4 列 flexbox 布局缩小为 2 列?

javascript - Polymer:如何动态导入一个元素

html - Polymer 中的自定义属性不起作用

javascript - Polymer 3 - 有没有办法将 html 模板提取到单独的 html 文件中?

html - polymer - 主机的样式子节点