0

我正在尝试在前端使用 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。将帐户和用户之间的关系放在帐户表中对我来说是有意义的,而不是必须在用户表中维护帐户列表。我的帐户表有一个 id 字段和一个 own_by 字段,其中包含拥有该帐户的用户的 id。我的事务表也是如此。我不必在帐户中维护交易列表,而是在交易表中有一个帐户字段,其中包含该交易的帐户 ID。这对我来说是有意义的,但我不确定这是否适合 Ember 期望数据的方式。

我能够使用以下方法在我的用户路由的 setupController 方法中将帐户连接到用户:

this.controllerFor('accounts').set('model', App.Account.find({ownedBy:model.id}));

但我不知道如何将交易链接到帐户。

有人可以帮我解决这个问题吗?谢谢 :)

4

1 回答 1

1

如果您遵循约定并相应地构建您的 Json 响应,则您无需进行任何接线,并且您的对象将被正确反序列化

这是一个示例,侧载您的帐户和交易

{
  "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,
  }]
}
于 2013-01-28T19:05:18.777 回答