聚合元素注册前的JavaScript初始化

聚合元素注册前的JavaScript初始化,javascript,object,initialization,polymer-1.0,Javascript,Object,Initialization,Polymer 1.0,从Polymerv0.5到v1.0聚合物元素的注册过程似乎有所不同。在Polymer v1.0之前,我们可以从index.html执行JavaScript代码来初始化Polymer元素中所有需要的对象。这是一个非常重要的细节,因为Polymer中的数据绑定只有在首先初始化绑定对象时才能正常工作。这意味着: 例如,如果要将聚合元素中的对象与{{}或[[]]]绑定,则必须在注册聚合元素之前定义对象!见: <dom-module id="my-elem"> <template&g

Polymer
v0.5v1.0聚合物元素的注册过程似乎有所不同。在
Polymer v1.0
之前,我们可以从
index.html
执行JavaScript代码来初始化
Polymer元素中所有需要的对象。这是一个非常重要的细节,因为
Polymer
中的
数据绑定只有在首先初始化绑定对象时才能正常工作。这意味着:

例如,如果要将
聚合元素
中的对象与
{{}
[[]]]
绑定,则必须在注册
聚合元素
之前定义对象!见:

<dom-module id="my-elem">
  <template>
    <div>This should be my bounded object: <b>{{obj.name}}</b></div>
  </template>
  <script>
    Polymer({
    is: 'my-elem',
    ready: function () {
      // Global initialized object!!!
      // app.obj ==> app.obj = { name: 'Great', info: 'Additional info!!!' };
      this.obj = app.obj;
    }
    ...      
  </script>
</dom-module>

这应该是我的有界对象:{{obj.name}
聚合物({
是‘我的元素’,
就绪:函数(){
//全局初始化对象!!!
//app.obj==>app.obj={name:'Great',info:'Additional info!!!'};
this.obj=app.obj;
}
...      
问题在于,如果在初始化app.obj
之前注册了
聚合物元素
(在上述
示例中,
聚合物元素
注册时,该.obj
未定义
)然后,即使以后
app.obj
未定义,也将执行NO通知,并且不提供更新

因此,在这种情况下,我们需要先初始化所有有界对象,然后才能将它们与
{{}
[[]]
一起使用


我们的方法完全错了吗?有什么建议吗?

我也有类似的案例,但工作时并不担心异步。 只需显式定义属性就可以了

properties: {
  obj: {
    type: Object,
    value: {}
  }
}
如果这不起作用,请尝试指定
observer
,并定义一个能正确处理
obj
的函数

properties: {
  obj: {
    type: Object,
    value: {},
    observer: 'loaded'
  }
}

作为一种解决方法,我将在
ready
函数中添加一个事件侦听器,该侦听器将在
app.obj
加载并设置绑定时侦听触发的事件,而不是
this.obj=app.obj;

ready: function() {
  var that = this;
  this.addEventListener('app-obj-loaded', function() {that.obj=app.obj});
}

如何从JavaScript中触发或发送
app obj loaded
事件?可以使用不同的方法触发自定义事件,但我会使用。只能从聚合上下文内部使用。在我的例子中,我从
Firebase
检索对象,该对象是异步的,发生在JavaScript上下文中。我认为将UI组件与数据层混淆。因此,我需要另一种方法来通知我的聚合UI组件JavaScript中发生的更改。1.
Polymer
是一个全局定义的变量,因此可以从聚合元素之外的任何位置访问它。2.聚合不仅用于UI,例如,还有聚合元素。3.如果不想使用
Polymer.Base.fire
,可以使用或。这两个建议对我不起作用。与文档对应,我必须使用一个助手函数
notifyPath(path,value)
set(path,value)
通知系统,
obj
已更改。在我的情况下,我必须在JavaScript中执行此操作,其中我的异步
Firebase
函数调用检索对象。因此,对指定为绑定属性的任何子属性的更改似乎都需要这样的实现。事实上,这就是您描述的文档。谢谢用于共享更新。我目前正在与一个非常类似的问题进行斗争。您找到了一个可以接受的方法来处理这个问题吗?