我想引用一个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集合的情况下引用该实例,或者这可能是这样的吗?
答案 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/