Data binding 与子对象的数据绑定';聚合物中的子元素
我正在使用Skygear作为BaaS。 我创建了一个聚合元素Data binding 与子对象的数据绑定';聚合物中的子元素,data-binding,polymer,polymer-1.0,skygear,Data Binding,Polymer,Polymer 1.0,Skygear,我正在使用Skygear作为BaaS。 我创建了一个聚合元素skygear应用程序(就像polymerfiredo)来初始化skygear实例 <skygear-app name="skygear" app={{skygear}} end- point="https://xyz.skygeario.com/" api-key="SECRET"></skygear-app> 我可以通过console.log(skygear.currentUser.id)获取数据,
skygear应用程序
(就像polymerfire
do)来初始化skygear实例
<skygear-app name="skygear" app={{skygear}} end-
point="https://xyz.skygeario.com/" api-key="SECRET"></skygear-app>
我可以通过console.log(skygear.currentUser.id)获取数据代码>,但是,
我无法使用数据绑定{{skygear.currentUser.id}
获取用户id
<h4>Access Token: [[skygear.accessToken]]</h4> <!-- working -->
<h4>User Id: [[skygear.currentUser.id]]</h4> <!-- not working -->
访问令牌:[[skygear.accessToken]]
用户Id:[[skygear.currentUser.Id]]
像{{skygear.endpoint}}
这样的1级属性起作用;
但是像{{skygear.currentUser.id}}
这样的二级属性就不需要了
数据绑定是否仅限于1级?有什么想法可以解决吗?根据polymer1.0文档,2级属性是不可观察的更改
,参考:
我们可以使用skygear container提供的onUserChanged
通知polymer app
这是skygear应用程序的最小工作时间
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
}
});
内的匿名函数中的this
。then()
不是正确的this
。我们不必在配置之后通知。他们应该是独立的。我认为应该有两条路径。首先是onUserChanged(),它在用户登录、注销或更改电子邮件时更新值。第二个是config()/init(),它获取当前登录用户。(虽然此
的范围不是代码中预期的范围)
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
}
});