Ember.js:数据正在从我的灯具阵列中清除,具体取决于它的访问方式

时间:2013-02-14 22:33:24

标签: javascript arrays binding ember.js fixtures

我有2个控制器。第一个,KeywordsIndexController看起来像这样:

App.KeywordsIndexController = Em.ArrayController.extend({

    contentBinding: "App.Keyword.FIXTURES"

});

...另一方面,KeywordsNewController是一个空白数组控制器:

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

我还有2个视图,KeywordsIndexView和KeywordsNewView,每个视图都有一个功能。 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数组时,它会以空类的形式返回。

我不确定是什么会导致这种行为,并且非常感谢任何想法/帮助。

EXTRA CREDIT

在测试环境(即FIXTURES)中是否有更好的方法来引用“App.Keyword.FIXTURES”以外的对象?

谢谢!

1 个答案:

答案 0 :(得分:1)

  

在测试环境(即FIXTURES)中是否有更好的方法来引用“App.Keyword.FIXTURES”以外的对象?

在路线的App.Keyword.all()方法中使用model

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

这是 live 数组,如果以后添加某些模型,将会更新。

此外,不要将对象推送到FIXTURES,只需使用createRecord创建新对象:

App.Keyword.createRecord({
    id: App.Keyword.length,
    name: newKey.value,
    scode: '55678',
    campaign: null
});