我想创建一个新的站点记录。该模型看起来像:
var SiteModel = DS.Model.extend({
name: attr(),
...
languages: DS.hasMany('language'),
});
language
属性描述了可以用哪种语言编写站点的内容。要创建表单,我需要在我的路线中创建一个模型。所以我想创建一个新记录,而不将其保存到db:
var WebsitesNewRoute = Ember.Route.extend({
model: function() {
return this.store.createRecord('site', {
languages: Ember.A()
});
}
}
这不符合预期,因为我收到以下错误:cannot set read-only property "languages" on object: <app@model:site::ember1012:null>>
。为什么languages
属性是readOnly?据我所知,我没有在我的模型中配置...
我知道问题Ember Data- createRecord in a hasMany relationship,但在我的情况下,我不想保存任何东西(我只想创建模型,所以我可以在我的模板中使用它)。
答案 0 :(得分:6)
Ember-Data将languages
定义为只读属性,因为它不希望您替换该数组。无论您是否保存,Ember-Data都希望您添加与addObject
的关系并删除与removeObject
的关系。
因此,如果你想添加一种语言,你可以这样做:
model: function() {
var model = this.store.createRecord('site');
var language = getLanguage();
model.get('languages').addObject(language);
return model;
}
将languages
提供给createRecord
,您正在做的事情本质上是调用model.set('languages', Ember.A())
,而Ember-Data不喜欢这样做。
这是愚蠢的,我知道,但这就是Ember-Data的工作方式。