聚合元素注册前的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.5到v1.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
函数调用检索对象。因此,对指定为绑定属性的任何子属性的更改似乎都需要这样的实现。事实上,这就是您描述的文档。谢谢用于共享更新。我目前正在与一个非常类似的问题进行斗争。您找到了一个可以接受的方法来处理这个问题吗?