【问题标题】:ember-data creating a record with a one-to-many relationshipember-data 创建具有一对多关系的记录
【发布时间】:2013-10-31 10:46:07
【问题描述】:

我正在尝试使用接下来两个模型的关联关系创建一条新记录。

App.Kid = DS.Model.extend({
    attribute1: DS.attr("string"),
    parent: DS.belongsTo(parent)
});

App.Parent = DS.Model.extend({
    attribute1: DS.attr("string"),
    kids: DS.hasMany(kid)
});

我的路线如下。我还在我的模板中使用了一个动作处理程序,以通过表单将我的模型保存为属性的新值。

App.KidRoute = Ember.Route.extend({
    model: function (id) {
        return this.store.createRecord('kid', {parent: id});
    },
    actions:{
        save: function(){
            this.get('currentModel').save();
        }
    }
});

但是我收到了这个错误。

Assertion failed: You can only add a 'parent' record to this relationship 

我知道我做错了什么,但如果parent 只是一个属性而不是belongTo 关系,它就可以工作。但我不想要这个。

提前致谢!

【问题讨论】:

  • 请发布您的路由器定义
  • 我认为问题不会出现在这里,但我在App.Router.map 中使用了this.resource('kid')

标签: ember.js ember-data


【解决方案1】:

在那段代码中:

this.store.createRecord('kid', {parent: id});

变量 id 可能是一些字符串、数字等。ember-data 需要模型实例,因此您需要加载它。

尝试使用以下内容:

App.KidRoute = Ember.Route.extend({
    model: function (id) {
        var route = this;
        return this.store.find('parent', id).then(function(parentModel) {
            return route.store.createRecord('kid', {parent: parentModel});
        });
    },
    actions:{
        save: function(){
            this.get('currentModel').save();
        }
    }
});

【讨论】:

  • id 确实是一个数字,你是对的。事实上,我也尝试过您的解决方案,但没有结果,因为 ember 说 Uncaught TypeError: Cannot call method 'save' of undefined...
  • 我在这里模拟了你的问题jsfiddle.net/marciojunior/QUJ8j 并且保存方法仍然存在。
  • 但是你的模拟是部分的,因为我需要像你上面写的那样用相关的模型创建一个记录,所以如果我用{parent: parentModel} 来做,我会得到undefined 错误。 ://
  • 而原因是createRecord 调用不创建记录,虽然我不知道为什么。
  • @bschaeffer this.modelFor('kid').save() 提供与this.currentModel.save() 相同的效果。但是currentModelmodelFor 快,因为modelFor 会在容器中查找kid 路由实例,并检索模型。有了currentModel 属性,我们已经有了模型实例,所以没有查找成本。
猜你喜欢
  • 1970-01-01
  • 2014-12-10
  • 2013-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多