6

ここでのかなり率直な Ember の質問です (願わくば!)。

シンプルな Ember データのセットアップがあります。1 つのアプリには多くのバージョンがあります。これが私のアプリモデルです:

App.App = DS.Model.extend({
  name: DS.attr('string'),
  publicKey: DS.attr('string'),
  versions: DS.hasMany('App.Version', { key: 'version_ids' })
});

私のルーターはかなり単純です。

App.Router = Ember.Router.extend({
  location: 'hash',
  root: Ember.Route.extend({
    index: Ember.Route.extend({
      route: '/',
      redirectsTo: 'dashboard'
    }),
    dashboard: ...,
    app: Ember.Route.extend({
      route: '/:app_id',
      connectOutlets: function(router, app) {
        router.get('applicationController').connectOutlet('appTest', app);
      },

      index: Ember.Route.extend({
        route: '/',
        connectOutlets: function(router) {
          appTestController = router.get('appTestController');
          appTestController.connectOutlet('addCommentOutlet', 'addComment', {});
          appTestController.connectOutlet('versions', appTestController.get('content.versions'));
        }
      })
    })
  })
});

ビューとコントローラーは次のようになります。

App.AppTestView = Ember.View.extend({
  templateName: 'app_test'
});

App.VersionsView = Ember.View.extend({
  templateName: 'versions'
});

App.AppTestController = Ember.ObjectController.extend({
});

App.VersionsController = Ember.ArrayController.extend({
});

残念ながら実行すると、次のエラーが表示されますan Ember.CollectionView's content must implement Ember.Array. You passed <App.Version:ember519>

興味深いことに、[appTestController.get('content.versions')]ルーターに角かっこを追加すると、エラーは発生せず、最初の Version オブジェクトを含む配列が正しく作成されます。しかし、複数のオブジェクトを表示したくないようです。

任意のヒント?

4

1 に答える 1

11

結局、それはモデル、ビュー オブジェクト、またはコントローラーではありませんでした。それはルーターでさえありませんでした。

でしたversions.handlebars。以下のように、テンプレートのループ内にループがありました。

{{#each version in controller}}
  Version here
  {{#each comment in version}}
    {{comment.text}}
  {{/each}}
{{/each}}

私は間違って書いた:

each comment in version

...私が書くつもりだった場所:

each comment in version.comments

:)それはエラーメッセージを説明しています。これが他の誰かに役立つことを願っています!

于 2012-11-03T08:00:57.830 に答える