我已经确定了一些我想看看是否有人可以解释的行为。
我在这里制作了一个jsfiddle http://jsfiddle.net/iceking1624/PpWec/17/。要测试行为,请打开Web控制台,只需在“添加问题”按钮旁边的文本字段中键入内容,然后单击按钮(“添加问题”)。
以下是DS.Model
架构:
App.Session = DS.Model.extend({
"questions" : DS.hasMany('App.Question') ,
"firstQuestion" : DS.belongsTo('App.Question')
});
App.Question = DS.Model.extend({
"session" : DS.belongsTo('App.Session'),
"choices" : DS.hasMany('App.Choice'),
"text" : DS.attr('string')
});
App.Choice = DS.Model.extend({
"session" : DS.belongsTo('App.Session'),
"question" : DS.belongsTo('App.Question'),
"text" : DS.attr('string')
});
当我在SessionController
内执行以下操作时,请调用addQuestion
函数:
App.SessionController = Ember.ObjectController.extend({
addQuestion: function() {
var sessionModel = this.get('model');
var question = App.Question.createRecord({
"session" : sessionModel
});
this.get('questions').pushObject(question)
}
});
我得到了以下'错误',但它仍然按预期运行:
错误:断言失败:您定义了“会话”关系 App.Question,但类型的多个可能的反向关系 App.Question在App.Session上找到。
现在我发现它是因为在App.Session
内我有两个引用App.Question
的字段:
"questions" : DS.hasMany('App.Question') ,
"firstQuestion" : DS.belongsTo('App.Question')
但我想知道为什么Ember关心我有多个App.Question
关系?特别是为什么它会抛出一个错误,但工作完美。这可能是个错误吗?
有没有办法可以让Ember高兴并且不会抛出错误?我真的需要App.Session模型中的firstQuestion
字段。
打开控制台,查看我的jsfiddle。这是我的问题的一个完美的例子。然后尝试在firstQuestion
中评论App.Session = DS.Model
并观察错误如何神奇地消失
答案 0 :(得分:8)
所以我找到了解决方案。我希望这有助于将来的某个人!
显然,将多个关系定义为与我相同的模型是不合适的,而不是更具描述性......
下面我questions
和firstQuestion
都指向App.Question
,而Ember不喜欢我这么模糊!
App.Session = DS.Model.extend({
"questions" : DS.hasMany('App.Question') ,
"firstQuestion" : DS.belongsTo('App.Question')
});
为了减少错误传达的机会(并消除恼人的错误),反向关系可以明确定义如下:
App.Session = DS.Model.extend({
"questions" : DS.hasMany('App.Question', { inverse: 'session' }),
"firstQuestion" : DS.belongsTo('App.Question')
});
App.Question = DS.Model.extend({
"session" : DS.belongsTo('App.Session', { inverse: 'questions' }),
"choices" : DS.hasMany('App.Choice'),
"text" : DS.attr('string')
});
这摆脱了错误。如果其他人有更多的洞察力甚至批评,我都会有兴趣听到。