2

Ember.js でアイテムを見つける適切な方法は何ArrayControllerですか? コントローラーに一連の連絡先があります:

App.contactsController = Em.ArrayController.create({
    content:[],
});

コントローラーにオブジェクトがあり、それらが表示され、すべて正常に動作します。次に、シリアライゼーション/デシリアライゼーションを使用してルーターを実装したいと思います。

...
deserialize:function (router, params) {
    var contact = App.contactsController.find(function(item) {
        return item.id == params.contact_id;
    });
},
...

ただし、find 関数は反復処理を行っていないようです。その理由は何ですか?アプリケーションがそのreadyメソッドを呼び出す前に、ルーターがルーティングを試みる可能性はありますか? それが、コントローラーにデータを入力する場所です。

編集: そうですね、arrayController に (Ember.Application.readyメソッド内で) データを入力する前に、ルーターが移行を試みていることがわかりました。データが適切に設定された後、ルーティングを「遅らせる」ことは可能ですか?

4

3 に答える 3

0

この問題は、Router がデシリアライズを行った後に arrayController にデータを挿入したことが原因でした。App.initialize() の前に置くと問題が解決しました。

于 2012-08-16T14:34:03.440 に答える
0
var contact = App.contactsController.filter(function(item) {
    return item.id == params.contact_id;
});

ルーターが設定されている場合は、 Application.initialize() を実行できると思います。オブザーバーを使用してデータセットを検出できます。

dataChanged: function() {
    console.log(this.get('content.length'));
    // before emberjs 1.0pre
    // console.log(this.getPath('content.length')); 
}.observes('content')
于 2012-08-16T14:27:04.770 に答える
0

正解は次のとおりです。

var contact = App.contactsController.content.find(function(item) {
    return item.id == params.contact_id;
});

コンテンツ配列を指していない場合、アイテムは返されません。

于 2012-09-29T07:14:53.240 に答える