0

フロントエンドでEmberjsを使用して単純なアプリケーションを構築しようとしていますが、データベーステーブルのJSON表現を返すRESTfulサーバーがサーバー上で実行されています。

データベースには、ユーザー、アカウント、トランザクションの3つのテーブルがあります。このアプリケーションは、銀行口座のように機能します。ユーザーhasManyアカウント、アカウントはユーザーに属し、hasManyトランザクション、トランザクションはアカウントに属します。

私のモデルはこのように記述されています

// 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の詳細が表示されます。詳細には、口座番号、口座残高、取引リストを表示できるようにしたいと思います。

ですから、これが私にはよくわからないことです。私のデータベースusersテーブルには、id、first_name、およびlast_nameがあります。ユーザーテーブルにアカウントのリストを保持するのではなく、アカウントとユーザーの関係をアカウントテーブルに入れるのは理にかなっています。アカウントテーブルには、idフィールドと、アカウントを所有するユーザーのIDを持つowned_byフィールドがあります。同じことが私のトランザクションテーブルにも当てはまります。アカウント内のトランザクションのリストを維持する必要はなく、トランザクションテーブルにそのトランザクションのアカウントの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 に答える