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

これは実際には残り火データのことではありません。新しいルーターは、コントローラーの content プロパティを自動的に設定します。コントローラーの定義内からコンテンツを設定する代わりに、モデル フックをオーバーライドして、ルートに使用されるモデルをカスタマイズします。例えば:

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

ここでjsfiddleを変更しました:http://jsfiddle.net/WGYmg/

于 2013-02-06T18:01:07.930 に答える
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 に答える