简体   繁体   English

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

[英]Ember-data createRecord with hasMany relationship without saving

I want to create a new site record. 我想创建一个新的站点记录。 The model looks like: 该模型看起来像:

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

    languages: DS.hasMany('language'),
});

The language property describes in which languages the content of a site can be written. language属性描述了可以用哪种语言编写站点的内容。 To create the form, I need to create a model in my route. 要创建表单,我需要在我的路线中创建一个模型。 So I want to create a new record, without saving this one to the db: 所以我想创建一个新记录,而不是将其保存到db:

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

That does not work as intended, as I got the following error: cannot set read-only property "languages" on object: <app@model:site::ember1012:null>> . 这没有按预期工作,因为我收到以下错误: cannot set read-only property "languages" on object: <app@model:site::ember1012:null>> Why is the languages property readOnly? 为什么languages属性readOnly? As far as I know I did not configure that in my model... 据我所知,我没有在我的模型中配置...


I know the question Ember Data- createRecord in a hasMany relationship , but in my case I don't want to save anything yet (I only want to create the model, so I could use it in my template). 在一个hasMany关系中知道问题Ember Data-createRecord ,但在我的情况下我还不想保存任何东西(我只想创建模型,所以我可以在我的模板中使用它)。

Ember-Data defines languages as a read-only property because it doesn't want you to replace the array. Ember-Data将languages定义为只读属性,因为它不希望您替换该数组。 No matter if you're saving or not, Ember-Data wants you to add relationships with addObject and remove relationships with removeObject . 无论您是否保存,Ember-Data都希望您添加与addObject关系并删除与removeObject关系。

So if you wanted to add a language, you would do this: 所以如果你想添加一种语言,你会这样做:

model: function() {
    var model = this.store.createRecord('site');
    var language = getLanguage();
    model.get('languages').addObject(language);
    return model;
}

What you're doing by giving languages to createRecord , is essentially calling model.set('languages', Ember.A()) , and Ember-Data doesn't like that. 你为createRecord提供languages所做的就是调用model.set('languages', Ember.A()) ,而Ember-Data不喜欢这样。

It's dumb, I know, but that's just how Ember-Data works. 我知道,这是愚蠢的,但这就是Ember-Data的工作原理。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM