与Polymer中的子元素元素进行数据绑定

时间:2017-04-19 01:45:46

标签: data-binding polymer polymer-1.0 skygear

我使用Skygear作为BaaS。 我创建了一个聚合物元素<router-outlet name=secondaryInfo></router-outlet> <router-outlet></router-outlet> (就像<android.support.design.widget.BottomNavigationView android:background="@color/colorPrimary" app:itemBackground="@color/colorPrimary" // .... /> 一样)来初始化skygear实例。

skygear-app

我也可以通过

成功登录
polymerfire

我可以通过 <skygear-app name="skygear" app={{skygear}} end- point="https://xyz.skygeario.com/" api-key="SECRET"></skygear-app> 获得userId,但是, 我无法使用数据绑定 passwordSignIn: function(){ skygear.loginWithEmail(this.email, this.password).then( function(){ console.log('login ok'); console.log(skygear.currentUser.id); this.currentUser = skygear.currentUser; } ); 来获取userId。

console.log(skygear.currentUser.id);

{{skygear.currentUser.id}}等1级属性有效; 但是第2级属性如 <h4>Access Token: [[skygear.accessToken]]</h4> <!-- working --> <h4>User Id: [[skygear.currentUser.id]]</h4> <!-- not working --> 并不是

数据绑定仅限于1级吗?还有什么想法要解决?

1 个答案:

答案 0 :(得分:1)

根据polymer1.0 doc,第2级属性为Unobservable changes,参考:https://www.polymer-project.org/1.0/docs/devguide/data-system#unobservable-changes

我们可以使用skygear容器提供的onUserChanged来通知聚合物应用程序。

这是最小化的Polymer skygear-app

  Polymer({
    is: 'skygear-app',
      apiKey: {
        type: String
      },
      endPoint: {
        type: String
      },
      app: {
        type: Object,
        notify: true,
        computed: '__computeApp(name, apiKey, endPoint)'
      }
    },
    __computeApp: function(name, apiKey, endPoint) {
      if (apiKey && endPoint) {
        skygear.onUserChanged(() => {
          this.notifyPath('app.currentUser.id');
        });
        skygear.config({
          apiKey: apiKey,
          endPoint: endPoint
        }).then(() => {
          this.notifyPath('app.currentUser.id');
        });
        return skygear
      } else {
        return null;
      }

      return skygear
    }
  });