1

サーバーから適切なデータを取得する RestAdapter を備えたアプリがあります。

App.AFile= DS.Model.extend({
  name: DS.attr( 'string' ),
...

App.Store = DS.Store.extend({
  revision: 13,
  adapter: DS.RESTAdapter.extend({url: "myapi"})
});

そして、このような地図:

App.Router.map(function() {
  this.resource('allfiles', { path: '/allfiles' });
  this.resource('onefile', {path: '/onefile/:onefile_id' });

そしてルートは次のように定義されます:

App.allfilesRoute = Ember.Route.extend({
  model: function()
  {
      return App.AFile.find();
  }
});

App.onefileRoute = Ember.Route.extend({
  model : function(params)
  {
      return App.AFile.find(params.onefile_id);
  }
});

そしてそれらのテンプレート:

 <script type="text/x-handlebars" data-template-name="allfiles">
 {{#each controller}}
    {{#linkTo onefile this}}open{{/linkTo}}
 {{/each}}
 </script>

 <script type="text/x-handlebars" data-template-name="onefile">
   {{name}}
 </script>

これは次のように機能します: ユーザーがアプリを開くと、open というリンクを含む allfiles テンプレートが表示されます。このリンクは、onefile というテンプレートを開き、onefile_id をそれに渡します。

アプリを開いて開くをクリックすると、動作し、1 つのファイルの適切な名前が表示されます。URL は #/onefile/1 に設定されます。1 は onefile_id です。それでうまくいきます。

しかし、ページ (#/onefile/1) を更新すると、名前よりも表示されなくなりました。

ID を返す前に onefileRoute モデル関数で何が起こっているかを確認しましたが、App.AFile で定義されているすべてのフィールドに null 値が含まれていることがわかりました。アプリが読み込まれた後、これらの値は App.AFile オブジェクトに正しく入力されますが、ビューには表示されません。

したがって、ビュー表示後に RestAdapter がデータを取得するように見えます。

それを機能させる方法は?

4

1 に答える 1

0
App.onefileRoute = Ember.Route.extend({
  model : function(params)
  {
      var m = App.AFile.find(params.onefile_id);
      // at this point m might not be resolved, so name could be empty
      return m;
  },
  afterModel: function(model, transition){
      // at this point it should be resolved, what happens here?
      console.log(model.get('name'));
  }
});

私の推測では、エンドポイントが ID によってモデルの間違った情報を返していると思います。

于 2013-08-01T00:24:25.600 に答える