聚合物使用行为来共享元素之间的对象?

时间:2015-11-28 00:32:54

标签: javascript polymer polymer-1.0

是否可以使用行为在元素之间共享对象?

<script>
  selectedBehavior = {
    properties: {
      selected: Object
    }
  }
</script>
<dom-module id="paper-menu-custom">
  <style>
  </style>
  <template>
    <paper-menu attr-for-selected="name" selected="{{selected.choice}}">
    ...
  <script>
    Polymer({
        is: "paper-menu-custom",
        behaviors: [selectedBehavior]
    });
  toolbars = document.querySelector('paper-menu-custom');
  toolbars.selected.choice = "home";

Uncaught TypeError: Cannot set property 'choice' of undefined

4 个答案:

答案 0 :(得分:4)

您不需要使用行为来在元素之间共享信息。

您应该像IronMeta那样使用:

  • 以声明方式和数据绑定:

<iron-meta key="my-unique-key" value="{{mySharedInformation}}"></iron-meta>

然后使用mySharedInformation,就像使用自定义元素的properties一样。设置它将更新代码中共享相同密钥的任何其他<iron-meta>的值。

  • 简单的javascript:

var mySharedInformation = new Polymer.IronMeta().byKey('my-unique-key');

new Polymer.IronMeta({key: 'my-unique-key', value: mySharedInformation});

答案 1 :(得分:2)

在github(https://github.com/akc42/akc-meta)中查看我的对象,它允许一个元素使用键发布值,而其他ti有多个实例订阅它并再次获取数据。

通过将实例保存在私有变量

中来实现
(function(){
var private;

Polymer({element definition has access to private});


})();

答案 2 :(得分:0)

我得到了它:

<script>
  selectedBehavior = {
    properties: {
      selected: { 
        type: Object,
        value: function() { return { choice: 'home'} }
      }
    }
  }
</script>

似乎指定一个对象是不够的。我需要为object的值返回一个对象。没有多大意义,因为在文档中我应该只能说foo: Object。但是,也许这是一种特殊情况,我将其用作行为。

不幸,两个元素无法通过行为共享相同的obj.property。每个人都有自己的实例。

答案 3 :(得分:0)

如果要在元素的不同实例之间共享对象,则必须避免使用Documentation中描述的函数 所以这应该像你期望的那样工作:

<script>
  selectedBehavior = {
    properties: {
      selected: { 
        type: Object,
        value: { choice: 'home'} }
      }
    }
  }
</script>