Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 聚合物-使用行为在元素之间共享对象?_Javascript_Polymer_Polymer 1.0 - Fatal编程技术网

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

Javascript 聚合物-使用行为在元素之间共享对象?,javascript,polymer,polymer-1.0,Javascript,Polymer,Polymer 1.0,是否可以使用行为在元素之间共享对象 <script> selectedBehavior = { properties: { selected: Object } } </script> uncaughttypeerror:无法设置未定义的属性“choice”我用以下方法得到它: <script> selectedBehavior = { properties: { selected: {

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

<script>
  selectedBehavior = {
    properties: {
      selected: Object
    }
  }
</script>
uncaughttypeerror:无法设置未定义的属性“choice”

我用以下方法得到它:

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

selectedBehavior={
特性:{
选定:{
类型:对象,
值:函数(){return{choice:'home'}
}
}
}
似乎仅仅指定一个对象是不够的。我需要为object的值返回一个object。没有多大意义,因为在文档中我应该只能说
foo:Object
。但是,也许这是一个特例,我把它当作一种行为


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

如果要在元素的不同实例之间共享对象,必须避免使用 因此,这应该如您所期望的那样起作用:

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

selectedBehavior={
特性:{
选定:{
类型:对象,
值:{choice:'home'}}
}
}
}

看看github()中的my对象,它允许一个元素用一个键发布一个值,而另一个元素有多个实例订阅它并再次获取数据

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

(function(){
var private;

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


})();

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

您应该这样使用:

  • 以声明方式并使用数据绑定:

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

  • 在纯javascript中:
阅读

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


newpolymer.IronMeta({key:'my unique key',value:mySharedInformation})

谢谢!这也行得通,但并没有达到我的目标……两个元素要共享
选择。选择
。当
home
更改为其他内容时,更改不会反映在其他元素中。请确保使用
this。设置(…)
API以修改对象!是的……我使用
set
api来确保更新元素。我想这与本地dom和隔离有关。的文档不明确,所以我做了一些实验,它似乎没有按照我预期的方式工作(我不太记得这个问题,我认为这与更改值和将其传播到所有查询元素有关)。我试着查看代码,它看起来非常复杂,我(最初)认为akc meta会简单得多。最后,它仍然更简单,但在我发现我必须处理从DOM分离的元素之后,就不那么简单了。我的动机只是一个概念的证明。投票支持最后一句话——刚才是通过艰苦的方式学会的。
<script>
  selectedBehavior = {
    properties: {
      selected: { 
        type: Object,
        value: { choice: 'home'} }
      }
    }
  }
</script>
(function(){
var private;

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


})();