Ember-data createRecord与hasMany关系而不保存

Jac*_*gen 6 ember.js ember-data

我想创建一个新的站点记录.该模型看起来像:

var SiteModel = DS.Model.extend({
    name: attr(),
    ...

    languages: DS.hasMany('language'),
});
Run Code Online (Sandbox Code Playgroud)

language属性描述了可以用哪种语言编写站点的内容.要创建表单,我需要在我的路线中创建一个模型.所以我想创建一个新记录,而不是将其保存到db:

 var WebsitesNewRoute = Ember.Route.extend({
     model: function() {
         return this.store.createRecord('site', {
              languages: Ember.A()
         });
     }
 }
Run Code Online (Sandbox Code Playgroud)

这不符合预期,因为我得到以下错误:cannot set read-only property "languages" on object: <app@model:site::ember1012:null>>.为什么languages属性只读?据我所知,我没有在我的模型中配置...


在一个hasMany关系中知道问题Ember Data-createRecord,但在我的情况下我还不想保存任何东西(我只想创建模型,所以我可以在我的模板中使用它).

GJK*_*GJK 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;
}
Run Code Online (Sandbox Code Playgroud)

什么你通过给做的languagescreateRecord,基本上是呼唤model.set('languages', Ember.A()),和灰烬,数据不喜欢这一点.

我知道,这是愚蠢的,但这就是Ember-Data的工作原理.