将数据加载到ember模型中

时间:2013-01-28 18:08:31

标签: javascript rest frameworks ember.js ember-data

我正在尝试使用前端的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}));

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

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

1 个答案:

答案 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,
  }]
}