0

编辑 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 data,但似乎我被迫朝那个方向发展。

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

这是怎么回事?我该如何阻止它,或者这是否根深蒂固于余烬中的固执己见,以至于我需要接受它并顺其自然?


编辑

更进一步,即使您覆盖了钩子,似乎设置的任何内容model都将设置为该值。contentsetupController

例如:

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']

看到这个更新的小提琴

4

2 回答 2

0

您可以使用该setupController方法随意设置控制器的内容:

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

看到这个小提琴

编辑

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

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

这有点骇人听闻,但仍然.. :)

查看更新的小提琴

于 2013-02-06T18:28:23.070 回答
0

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

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

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

于 2013-02-06T18:01:07.930 回答