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())

顺便说一句,我建议将 formContainer 属性重命名为 FormContainer,因为约定是以大写开头的类定义。

这是一个工作示例:http: //jsfiddle.net/ZJjUM/1/

于 2013-01-08T17:39:08.350 回答