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

Polymer- use behavior to share object between elements?

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

<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

我明白了:

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

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

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

如果您想在元素的不同实例之间共享一个对象,则必须避免使用 Documentation 中描述的函数 所以这应该会如您所愿地工作:

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

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

它通过将实例保存在私有变量中来实现

(function(){
var private;

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


})();

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

你应该像这样使用 IronMeta :

  • 声明式和数据绑定:

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

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

  • 简而言之 javascript :

阅读

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

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