计算财产没有解雇

时间:2013-08-14 09:46:04

标签: ember.js

我有一个我在LoginController中使用的计算属性cookieToggle。基本思想是它会观察usernamerememberMe字段,并根据需要设置或清除用户名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');
        });
    }

});

1 个答案:

答案 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