聚合物 - 就绪事件但有界数据未就绪

Polymer - ready event but bounded data not ready

PolymerLabs 的 todo-list 应用程序中,我在 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>
..........

请问为什么在ready()中user总是打印成undefined?似乎在调用 ready() 时,边界数据尚未填充正确的数据。我什么时候才能可靠地知道边界数据何时已初始化?

当调用 ready() 时,这仅意味着 Polymer 已完成元素的创建和初始化。对 Firebase 的调用只是在此时调用,Polymer 不会等待对 Firebase 服务器的调用做出响应。这是由 <firebase-collection> 中的代码完成的,Polymer 并不知道。

当数据从服务器到达时,它被传递到 fbTodos

创建一个 属性 fbTodosfbTodos 变化时执行的观察者。这个观察者会在数据到达时被调用。

属性:{

fbTodos: {
  observer: '_dataArrvied'
},

user: {
  observer: '_userChanged'
},

<firebase-collection> 元素不提供 firebase-value 事件,因此

on-firebase-value="_firebaseLoaded"

似乎是多余的。

我自己还没有用过这个元素。