我有一个我在LoginController中使用的计算属性cookieToggle
。基本思想是它会观察username
和rememberMe
字段,并根据需要设置或清除用户名cookie。不幸的是,当我更新任何一个从属字段时,它从不调用cookieToggle
函数(由于缺少每个调用应该产生的控制台消息所观察到的)。我的主要问题是:为什么不呢?我的第二个问题是:这是否合理地使用了Ember的计算属性?
App.LoginController = Ember.ObjectController.extend({
CLIENT_ID: 1,
username: null,
password: null,
rememberMe: false,
cookieToggle: function() {
var rememberMe = this.get('rememberMe');
var username = this.get('username');
console.log("cookie toggle");
if (rememberMe) {
$.cookie('auth_username', username);
} else {
$.removeCookie('auth_username');
}
return rememberMe;
}.property('rememberMe','username'),
init: function() {
this._super();
if ($.cookie('auth_username')) {
this.set('username', $.cookie('auth_username'));
this.set('rememberMe', true);
}
},
loginUser: function() {
var router = this.get('target');
var data = this.getProperties('username', 'password', 'rememberMe');
var user = this.get('model');
$.post('/api/oauth/user_credentials', { username: data.username, password: data.password, client_id: this.get('CLIENT_ID') }, function(results) {
// App.AuthManager.authenticate(results.api_key.access_token, results.api_key.user_id);
console.log(results);
$.cookie('auth_user', results.user.id);
router.transitionTo('users/login');
});
}
});
答案 0 :(得分:3)
在这种情况下,计算属性不是正确的决定。您想使用Observer
。你自己甚至使用这个动词,对吗? :-)只需将您的声明从property
更改为observes
:
cookieToggle: function() {
var rememberMe = this.get('rememberMe');
var username = this.get('username');
console.log("cookie toggle");
if (rememberMe) {
$.cookie('auth_username', username);
} else {
$.removeCookie('auth_username');
}
}.observes('rememberMe','username') // will fire every time when one of those properties change