我有一个应用程序逻辑,它需要两个模型具有相互的 hasMany 关系。例如,想象一组可以用多个标签标记的 GitHub 问题。
我正在尝试使用扩展默认 RESTAdapter 的适配器。所有应用程序工作正常,但双重 hasMany 关系引发异常。深入研究代码,inverseBelongsToForHasMany 方法会引发异常。
所以,我猜 Ember.Data 不支持两个模型的关联,双方都有 hasMany 关系,每个 hasMany 都需要一个关联的belongsTo。我的问题是:
提前致谢
最佳答案
我们使用类似的方法创建关联对象。然而,我们没有覆盖 store 中的方法,而是将 join 对象添加到 api 中。
所以在我们创建的模型中:
App.Hashtag = DS.Model.extend({
hashtagUsers: DS.hasMany('App.HashtagUser', {key: 'hashtag_user_ids'})
});
App.User = DS.Model.extend({
hashtagUsers: DS.hasMany('App.HashtagUser', {key: 'hashtag_user_ids'})
});
App.HashtagUser = DS.Model.extend({
user: DS.belongsTo('App.User'),
hashtag: DS.belongsTo('App.Hashtag')
});
然后对于事务,我们只需更改并提交连接对象。
App.UserController = Ember.ObjectController.extend({
followHashtag: function(tag) {
var hashtagUser;
hashtagUser = this.get('hashtagUsers').createRecord({
hashtag: tag
});
tag.get('hashtagUsers').pushObject(hashtagUser);
App.store.commit();
}
unfollowHashtag: function(tag) {
var itemToRemove;
itemToRemove = this.get('hashtagUsers').find(function(hashtagUser) {
if (hashtagUser.get('hashtag') === this) {
return true;
}
}, tag);
this.get('hashtagUser').removeObject(itemToRemove);
tag.get('hashtagUser').removeObject(itemToRemove);
itemToRemove.deleteRecord();
App.store.commit();
});
API 创建了一个 HashtagUser 对象,follow 方法只是将该用户添加到两个相关联的部分。
对于删除,它弹出关联对象并销毁关联对象。
尽管它不如它应有的优雅,但我们的主要动机是,当 Ember Data 更新时,我们应该能够将其转换为简单的 Ember Data 支持的简单版本,而不是我们弄乱 Store 本身。
关于ember.js - EmberData : Two models related with hasMany relationships,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13299924/