1

私の ember アプリでは、次のようにリソースがネストされたルーターがあります。

App.Router.map(function () {
  this.resource('explore', function() {
    this.resource('building', { path: 'building/:slug' });
    this.resource('country', { path: ':slug' }, function() {
        this.resource('state', {path: ':slug' });
    });
  });
});

App.CountryRoute = Ember.Route.extend(App.SlugRouter, {
  setupController: function(controller, country) {
    controller.set('title', 'country detail');
    controller.set('model', country);
  }
});

App.SlugRouter = Ember.Mixin.create({
    serialize: function(model, params) {
        var name, object;
        object = {};
        name = params[0];
        object[name] = model.get('slug');
        return object;
    }
});

App.Building = DS.Model.extend({
    country: DS.belongsTo('App.Country'),
    name: DS.attr('string'),
    slug: DS.attr('string')
});

App.Country = DS.Model.extend({
  name: DS.attr('string'),
  slug: DS.attr('string'),
  buildings: DS.hasMany('App.Building'),
  states: DS.hasMany('App.State')
});

探索ルートを読み込むと、サーバー (django-rest-framework アプリ) から受信した建物のリストが表示されます。各建物は、属している国と関係があります。

explore.index ルートでは、 を使用して、建物のリストを各建物のカントリー ルートへのリンクとともに表示します{{linkTo this.country}}。ただし、href は#/explore/undefinedではなくとしてロードされ#/explore/<country-name>ます。

私を混乱させているのは、これがリストを初めてロードしたときにのみ発生することです。別のルートに移動して に戻ると#/explore、リンクは正しく表示されます。

デバッガーで serialize メソッドにブレークポイントを設定すると、最初にページをロードしたときにモデル オブジェクトが空であることがわかります (_data.attributes は空のオブジェクトです)。デバッガーの [ネットワーク] タブに移動すると、国データを取得するためにサーバーに要求が行われたことがわかりますが、応答はまだ受信されていません。

サーバーの応答がまだ受信されていません

正しくレンダリングされるため、応答は最終的に受信{{this.country.name}}されますが、遅すぎます。

回答/ヒントをお寄せいただきありがとうございます。

私が使用している: Ember: 1.0.0-rc.5、Handlebars: 1.0.0-rc.4、jQuery: 1.8.3、ember-data: 0.13、ember-data-django-rest-adapter: 0.13

4

1 に答える 1

2

まず、App.SlugRouter定義の前に混合しています。Assertion failed: Expected hash or Mixin instance, got [object Undefined]コンソールのようなエラーが表示されるはずです。

その後、国のモデルをスラッグでロードする必要があります。あなたのルートにもこれはありません。CountryRoute永続化ライブラリに応じて、このようなものが必要です。

model: function(params) {
  return App.Country.find({slug: params.slug});
}

現在機能している部分は、インデックス ルートがモデルをロードsetupControllerし、linkTo. ネストされたページを直接読み込むには、そのルートのモデル フックを構成する必要があります。

于 2013-07-19T14:55:25.843 に答える