是否可以使用行为在元素之间共享对象?
<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
答案 0 :(得分:4)
您不需要使用行为来在元素之间共享信息。
您应该像IronMeta那样使用:
<iron-meta key="my-unique-key" value="{{mySharedInformation}}"></iron-meta>
然后使用mySharedInformation
,就像使用自定义元素的properties
一样。设置它将更新代码中共享相同密钥的任何其他<iron-meta>
的值。
读
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>