在PolymerLabs的待办事项列表应用中,我在todo-data.html中添加了ready()
功能,如下所示:
<dom-module id="todo-data">
<template>
<style>
</style>
<firebase-collection location="{{userLocation}}"
data="{{fbTodos}}"
on-firebase-value="_firebaseLoaded">
</firebase-collection>
.....
</template>
<script>
Polymer({
is: 'todo-data',
properties: {
todos: {
notify: true
},
user: {
observer: '_userChanged'
},
.......
ready: function() {
console.log(this.user);
}
});
user
属性值从index.html绑定到它,如下所示:
//index.html
<template is="dom-bind" id="app">
<todo-auth id="auth"
user="{{user}}"
location="[[firebaseURL]]"
user="{{user}}">
</todo-auth>
<todo-data location="[[firebaseURL]]"
todos="{{todos}}"
user="{{user}}">
</todo-data>
..........
我可以知道为什么用户总是在undefined
中以ready()
打印出来吗?似乎在调用ready()
时,有限数据尚未填充正确的数据。什么时候能可靠地知道有限数据何时被初始化?
答案 0 :(得分:1)
调用ready()
时,这仅表示Polymer已完成创建和初始化元素。 Firebase的调用仅在此时调用,而Polymer不会等待对Firebase服务器的调用进行响应。这是由<firebase-collection>
聚合物不知道的代码完成的。
当数据从服务器到达时,它将传递给fbTodos
创建一个属性fbTodos
以及fbTodos
更改时执行的观察者。当数据到达时,将调用此观察者。
属性:{
fbTodos: {
observer: '_dataArrvied'
},
user: {
observer: '_userChanged'
},
<firebase-collection>
元素未提供firebase-value
事件
on-firebase-value="_firebaseLoaded"
似乎多余。
我还没有自己使用过这个元素。