0

私は2つのコントローラーを持っています。最初の KeywordsIndexController は次のようになります。

App.KeywordsIndexController = Em.ArrayController.extend({

    contentBinding: "App.Keyword.FIXTURES"

});

...もう 1 つの KeywordsNewController は空の配列コントローラーです。

App.KeywordsNewController = Em.Controller.extend({
});

KeywordsIndexView と KeywordsNewView の 2 つのビューもあり、それぞれに機能があります。KeywordsIndexController は、キーワードのリストと単一のキーワードの削除を担当します。KeywordsNewController は、新しいキーワードを追加してから、キーワードのリスト (インデックス) に戻す役割を果たします。それらは次のようになります。

App.KeywordsIndexView = Em.View.extend({

    templateName: 'templates/keywords/index',

    delKeyword: function(e){
        var obj = App.Keyword.FIXTURES.findProperty("name", e._data.attributes.name);
            App.Keyword.FIXTURES.removeObject(obj);
        }

});

----------------------------------------

App.KeywordsNewView = Em.View.extend({

    templateName: 'templates/keywords/new',

    addKeyword: function(){
        App.Keyword.FIXTURES.pushObject({

            id: App.Keyword.length,
            name: newKey.value,
            scode: '55678',
            campaign: null

        });
        this.get('controller.target.router').transitionTo('keywords.index');
    }

});

問題

これらのイベントは両方とも、期待どおりに単独で機能します。新しいキーワードのページに直接アクセスすると、うまく機能します。この問題は、新しいキーワードを追加する前にキーワード リスト ページにアクセスすると発生します。そのルートをたどると、新しいキーワードを追加しようとすると次のエラーが発生します。

Uncaught TypeError: Cannot call method 'hasOwnProperty' of undefined
Uncaught TypeError: Cannot read property 'name' of undefined

さらに、App.Keyword.FIXTURES 配列を出力しようとすると、空のクラスとして返されます。

何がこの動作を引き起こすのかわかりません。考えや助けをいただければ幸いです。

追加クレジット

テスト環境 (つまり、FIXTURES) で、「App.Keyword.FIXTURES」以外にそのオブジェクトを参照するより良い方法はありますか?

ありがとう!

4

1 に答える 1

1

テスト環境(つまり、FIXTURES)で、「App.Keyword.FIXTURES」以外のオブジェクトを参照するためのより良い方法はありますか?

あなたのルートの方法で使用App.Keyword.all()してください:model

model: function(controller){
    return App.Keyword.all();
}

これはライブアレイであり、一部のモデルが後で追加される場合に更新されます。

また、オブジェクトをにプッシュしないでください。新しいオブジェクトを作成するためにFIXTURES使用してください。createRecord

App.Keyword.createRecord({
    id: App.Keyword.length,
    name: newKey.value,
    scode: '55678',
    campaign: null
});
于 2013-02-15T09:43:28.927 に答える