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

Ember.js (pre4) array controller not keeping state

本文关键字:状态 控制器 数组 js pre4 Ember      更新时间:2023-09-26

编辑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')
});

由于某些无法解释的原因,内容被覆盖。我不想使用ember数据,但我似乎是被迫这样做的。

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

怎么回事?我该如何阻止它,还是这是一种根深蒂固的固执己见,以至于我需要接受它并顺其自然?


编辑

更进一步地说,即使您覆盖了setupController挂钩,作为model设置的任何内容都将被设置为content值。

例如:

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

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

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

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

您可以使用setupController方法根据自己的喜好设置控制器的内容:

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

看看这个小提琴

编辑

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

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

这有点粗鲁,但仍然..:)

请参阅更新的fiddle