我正在尝试使用前端的Ember js构建一个简单的应用程序,并且我在服务器上运行了一个RESTful服务器,它返回数据库表的JSON表示。
数据库有三个表:用户,帐户,事务。该应用程序的工作方式类似于银行帐户。用户拥有多个帐户,一个帐户属于一个用户并拥有多个交易,一个交易属于一个帐户。
我的模型就是这样描述的
// Models
App.Store = DS.Store.extend({
revision: 11,
adapter: DS.RESTAdapter.create({
url: 'http://api.mydomain.ca'
})
});
App.User = DS.Model.extend({
firstName: DS.attr('string'),
lastName: DS.attr('string'),
accounts: DS.hasMany('App.Account')
});
App.Account = DS.Model.extend({
ownedBy: DS.belongsTo('App.User'),
transactions: DS.hasMany('App.Transaction')
});
App.Transaction = DS.Model.extend({
account: DS.belongsTo('App.Account'),
amount: DS.attr('number'),
description: DS.attr('string'),
timestamp: DS.attr('date')
});
我的控制器:
//Controllers
App.UserController = Ember.ObjectController.extend();
App.AccountsController = Ember.ArrayController.extend();
App.TransactionsController = Ember.ArrayController.extend();
和我的路线:
// Router
App.Router.map(function() {
this.resource('users', function() {
this.resource('user', {path:':user_id'});
}); // '/#/users/:user_id'
});
App.IndexRoute = Ember.Route.extend({
redirect: function() {
this.transitionTo('users');
}
});
App.UsersRoute = Ember.Route.extend({
model: function() {
return App.User.find();
}
});
App.UserRoute = Ember.Route.extend({
model: function(params) {
return App.User.find(params.user_id);
},
setupController: function(controller, model) {
this.controllerFor('accounts').set('model', App.Account.find({ownedBy:model.id}));
}
});
我正在使用主 - 细节布局。当您在'/ users / 3'访问我的应用程序时,它会在左侧显示用户列表,在右侧显示用户3的详细信息。在详细信息中,我希望能够显示帐号,帐户余额和交易列表。
所以这是我不确定的事情。我的数据库用户表有id,first_name和last_name。我有必要将帐户和用户之间的关系放在帐户表中,而不是在users表中维护帐户列表。我的帐户表有一个id字段和一个拥有该帐户的用户的id的owned_by字段。我的交易表也是如此。我不是必须维护帐户中的交易列表,而是在交易表中有一个帐户字段,其中包含该交易的帐户ID。这对我来说是有意义的,但我不确定这是否适合Ember期望数据的方式。
我能够使用以下方法在我的用户路由的setupController方法中将帐户连接到用户:
this.controllerFor('accounts').set('model', App.Account.find({ownedBy:model.id}));
但我不知道如何将交易链接到帐户。
有人可以帮我解决这个问题吗?谢谢:))
答案 0 :(得分:1)
如果按照约定并相应地构建Json响应,则无需进行任何连接,并且您的对象将被正确反序列化
以下是一个示例, sideloading 您的帐户和交易
{
"user": {
"id": 1,
"first_name": "john doe",
"accounts": [1, 2]
},
"accounts": [{
"id": 1,
"transactions": [1, 2, 3]
},
{
"id": 2,
}],
"transactions": [{
"id": 1,
},
{
"id": 2,
},
{
"id": 3,
}]
}