ember containerView作为属性

时间:2013-01-08 15:07:05

标签: ember.js

我想引用一个containerview作为父视图的属性。

例如,在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集合的情况下引用该实例,或者这可能是这样的吗?

1 个答案:

答案 0 :(得分: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())

BTW我建议将formContainer属性重命名为FormContainer,因为约定是从UpperCase开始进行类定义。

以下是一个有效的例子:http://jsfiddle.net/ZJjUM/1/