0

コンテナビューを親ビューのプロパティとして参照したいと思います。

たとえば、parentViewのテンプレートで、containerViewを次のように定義します。

<a {{action toggleForm target="view"}} class="btn btn-primary" href="#">Create</a>
{{view view.formContainer}}

次に、parentViewのcontainerViewのcurrentViewを次のように変更できるようにします。

  toggleForm: (e) ->
    e.stopPropagation()

    @get('formContainer').set('currentView', Em.View.create())

ただし、問題は、formContainerプロパティがインスタンスではなくクラスを参照することです。

childViewsコレクションから次のようにアクセスできます。

formContainer = @get('childViews.firstObject')

しかし、明らかに、ビューがfirstObjectでなくなると、コードが壊れます。

childViewsコレクションを経由せずにインスタンスを参照するにはどうすればよいですか、またはこれはこのように可能ですか?

4

1 に答える 1

1

あなたは正しい方向に進んでいました。問題は、formContainerプロパティ(明らかにビュークラスに設定されている)をビューインスタンスへの参照として使用しようとしていることです。

親からビューのインスタンスにアクセスする場合は、ビューヘルパーのviewNameプロパティを使用する必要があります。詳細については、 http://emberjs.com/api/classes/Ember.Handlebars.helpers.html#method_viewを参照してください。

<a {{action toggleForm target="view"}} class="btn btn-primary" href="#">Create</a>
{{view view.formContainer viewName="formContainerViewName"}}

この名前を使用して、親からビューを参照したり、currentViewプロパティを設定したりできます。

toggleForm: (e) ->
  e.stopPropagation()
  @get('formContainerViewName').set('currentView', Em.View.create())

ところで、慣例ではクラス定義のUpperCaseで始まるため、formContainerプロパティの名前をFormContainerに変更することをお勧めします。

これが実際の例です:http://jsfiddle.net/ZJjUM/1/

于 2013-01-08T17:39:08.350 に答える