2013-07-12 49 views
2

我已经指出了一些行为,我想看看是否有人可以解释。createRecord模型与多个关系相同的模型给出了多个可能的反比关系的错误

我在这里做了一个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) 
    } 
}); 

我碰到下面的“错误”,但它起到仍然预期:

Error: assertion failed: You defined the 'session' relationship on App.Question, but multiple possible inverse relationships of type App.Question were found on App.Session.

N嗷嗷我想通了,这是因为里面App.Session我引用App.Question两个领域:

"questions" : DS.hasMany('App.Question') , 
    "firstQuestion" : DS.belongsTo('App.Question') 

,但我不知道为什么灰烬在乎我有多个App.Question关系?特别是为什么它会抛出一个错误,但完美的工作。这可能是一个错误吗?

有没有一种方法可以让Ember高兴而不是抛出错误?我真的需要在我的App.Session模型中使用firstQuestion字段。

打开控制台,看看我的jsfiddle。这是我的问题的完美例子。然后尝试在App.Session = DS.Model中注释firstQuestion并观察错误如何神奇消失

回答

8

所以我找到了一个解决方案。我希望这将有助于未来的人!

显然,这是不正确的定义多关系,为我做了同样的模式,而不会更多的描述有点...

下面我都questionsfirstQuestion指向App.Question和灰烬不喜欢我太模糊了!

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') 
}); 

这摆脱了错误的。如果任何人有更多的见解,甚至批评,我会有兴趣听到。

+0

感谢分享!保存了我的一天。 :) – splattne

+1

仍帮助2013年11月20日嘿嘿。 –