2

この Ember ガイドで説明されている「ニーズ」構文を使用して、親 ArrayController と子 ObjectController の間の関係を設定しようとしています - http://emberjs.com/guides/controllers/dependencies-between-controllers/

子から親への参照を取得するためにコントローラー オブジェクトにアクセスしようとすると、「コントローラー オブジェクトが定義されていません」というエラーが発生します。どんな助けでも大歓迎です!

エンバー版 RC4

テンプレート:

<script type="text/x-handlebars" data-template-name="gigs">
<div> // code simplified
    {{#each controller itemController="gig"}}
        {{#view App.GigView contentBinding="this"}}
            <div class="tile">
                <img {{bindAttr src="photo_url"}} />
                {{#if widgetDisplayed}}
                    // widget view
                {{/if}}
            </div>
        {{/view}}
    {{/each}}
</div>  
</script>

Javascript:

App.GigsController = Ember.ArrayController.extend({
  anyWidgetDisplayed: false,

  isAnyWidgetDisplayed: function() {
      return anyWidgetDisplayed;
  }
});

App.GigController = Ember.ObjectController.extend({
  needs: ["gigs"],
  widgetDisplayed: false,

  displayWidget: function() {
    console.log(controllers.gigs);
    if (!controllers.gigs.isAnyWidgetDisplayed) {
      this.set("widgetDisplayed", true);
    }   
  }
});
4

1 に答える 1

2

needs 経由でコントローラーを使用する場合は、get 関数を使用してコントローラーを取得する必要があります。

displayWidget: function() {
    var gigsController = this.get('controllers.gigs')
    console.log(gigsController);
    if (!gigsController.get('isAnyWidgetDisplayed')) {
      this.set("widgetDisplayed", true);
    }   
  }

または、itemController を使用する場合、parentController を取得する必要はありません。parentController プロパティを使用できます。

App.GigController = Ember.ObjectController.extend({
  widgetDisplayed: false,

  displayWidget: function() {
    var gigsController = this.get('parentController');
    console.log(gigsController);
    if (!gigsController.get('isAnyWidgetDisplayed')) {
      this.set("widgetDisplayed", true);
    }   
  }
});

参照:このプルリクエスト

于 2013-06-06T17:27:25.543 に答える