聚合物-使用行为在元素之间共享对象?
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});
是否可以使用行为在元素之间共享一个对象?
<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});