Ember.js(pre4)数组控制器不保持状态

时间:2013-02-06 15:22:49

标签: javascript ember.js ember-router

修改2013-03-02

这似乎是在RC1中解决的


在以前版本的Ember.js中,控制器会保持状态分配给它们,但这似乎是Pre4中的一个问题。

所以,如果我有这个控制器

App.UsersController = Ember.ArrayController.extend({
    content: ['mike', 'jen', 'sofia'],

    _content_observer: (function(){
         /* I'm called, but my author doesn't know why */
         console.log('Content was altered! But why? And by whom?');
    }).observes('content')
});

由于某些无法解释的原因,内容会被覆盖。我不想使用余烬数据,但似乎我被逼这个方向。

JS Fiddle举例说明了这个问题。

发生了什么事?我如何阻止它,或者这是如此深深地刻在余烬的意见中,我需要接受它并顺其自然?


修改

更进一步,似乎设置为model的任何设置都将设置为content值,即使您覆盖setupController挂钩。

e.g:

UsersRoute = Ember.Route.extend({
    model: function() {
        /*I should never be called, but I am. How curious.*/
        return ['This','Shouldnt','Be','Assigned'];
    },
    setupController: function() {
        /* According to http://emberjs.com/guides/routing/specifying-a-routes-model/, I should prevent the model from being assigned to content, but I don't */
    }
});

UsersController.content最终会得到值['This','Shouldnt','Be','Assigned']

查看此更新的fiddle

2 个答案:

答案 0 :(得分:0)

这不是真正的余烬数据。新路由器自动设置控制器的内容属性。不是从控制器定义中设置内容,而是通过覆盖模型挂钩来自定义将用于路由的模型。例如:

App.UsersRoute = Ember.Route.extend({
    model: function() {
      return ['mike', 'jen', 'sofia', 'greta']
    }
}

我在这里修改了你的jsfiddle:http://jsfiddle.net/WGYmg/

答案 1 :(得分:0)

您可以使用setupController方法根据需要设置控制器的内容:

setupController: function(controller) {
    controller.set('content', []);
}

请参阅this fiddle

修改

您可以使用model方法返回原始内容:

model: function () {
    var c = this.controllerFor('users');
    return c.get('content');
}

这有点hackish,但仍然......:)

请参阅updated fiddle