在Ember中,如果您希望一个操作由视图处理,那么使用很容易实现
<button {{action 'something' target='view'}}>
`{{view App.targetView}}` // this is the view in which the 'something' action ought to be handled
如果您希望parentView处理此问题,则target='view'
将替换为target='parentView'
公平地说,我的问题是我想要一个childView来处理,而简单地声明"childView"会产生
'无法读取未定义'的属性'send'
我可以选择在这里指定视图的名称,比如:
target='targetView'
其中
{{view App.targetView viewName="targetView"}}
但没有奏效。也没有
target ='views.targetView' nor 'childViews.targetView'
请不要指导我更改应用程序的语义结构,说明带有此操作的按钮需要在app.targetView模板中,因为这对我来说是一种黑客行为,扰乱了我的应用程序的语法结构。
我需要知道的是如何使用目标属性来指定特定视图,而不仅仅是包含视图或父视图:)?
老实说,我的本能反应是"eek,不要那样做"。但是,我要暂停怀疑,并规定你有充分的理由想要这样做。
您的方法不起作用的原因是target
属性路径是在模板的上下文(默认情况下是控制器)中计算的。解决方案:在属性路径中使用view
关键字,并链接目标视图的viewName。
例如
<button {{action "foo" target="view.targetView"}}>Click me</button>
{{view App.TargetView viewName="targetView"}}
http://emberjs.jsbin.com/aGagORaz/1/edit?html,js,输出