车把的计算属性#if未更新

时间:2013-02-26 09:36:53

标签: ember.js

我正在尝试使用以下模板:

<script type="text/x-handlebars" data-template-name="login">
    {{#if logged_in}}
        Logged in
    {{else}}
        Not logged in
    {{/if}}
</script>

与模型:

App.Login = DS.Model.extend({
    access_token: DS.attr('string'),
    logged_in: function() {
        return (this.get('access_token') != null);
    }.property('access_token')
});

显示用户的登录状态。

access_token是通过Route的setupController中的异步回调设置的:

App.LoginRoute = Ember.Route.extend({
    setupController: function(controller, model) {
        controller.set('content', model);

        // call async login method
        window.setInterval(function test() {
            model.set('access_token', 'MY_ACCESS_TOKEN');
            console.log(model.get('access_token'));
        }, 5000);
    },
    model: function() {
        return App.Login.find();
    }
});

问题是logged_in似乎永远不会改变(即使执行了model.set行并更新了'access_token')。我做错了什么或者我应该提交错误吗?

完整代码:http://jsfiddle.net/Q8eHq/

1 个答案:

答案 0 :(得分:3)

您正在将模型设置为App.Login.find(),它返回一个可枚举的,而不是单个对象。一种方法是将模型设置为单个对象:

App.LoginRoute = Ember.Route.extend({
    model: function() {
        return App.Login.find(1);
    }
});

或者如果您打算使用动态路线(例如users / login / 9):

App.LoginRoute = Ember.Route.extend({
    model: function(params) {
        return App.Login.find(params.id);
    }
});