【问题标题】:Ember: Specify a target action view for an action helper, other than the containing or parent viewEmber:为动作助手指定目标动作视图,而不是包含视图或父视图
【发布时间】:2013-12-13 04:41:36
【问题描述】:

在 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' 产量

'无法读取未定义'的属性'发送'

我可以选择在此处指定视图的名称,例如:

target='targetView'

在哪里

{{view App.targetView viewName="targetView"}}

那没用。也没有

target ='views.targetView' nor 'childViews.targetView'

请不要通过说明具有此操作的按钮需要位于 App.targetView 模板中来指导我更改应用程序的语义结构,因为这对我来说是一种 hack 并且会弄乱我的应用程序的语义结构.

我需要知道的是如何使用目标属性来指定特定视图,而不仅仅是包含或父视图:)?

【问题讨论】:

    标签: events ember.js ember.js-view


    【解决方案1】:

    说实话,我的本能反应是“哎呀,别那样做”。但是,我将暂停怀疑并规定您有充分的理由想要这样做。

    您的方法不起作用的原因是 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,output

    【讨论】:

    • 是的,我完全同意,按钮存在于视图之外。但是他们操纵了这个特定的视图,试图让它们进入这个视图本身挑战了我的语义敏感性
    • 如果按钮存在于视图之外,让它发送一个动作到视图共享访问的控制器。控制器中处理的操作将更新视图随后将相应响应的属性。例如emberjs.jsbin.com/aGagORaz/2/edit?html,js,output
    • 您觉得这比简单地让按钮指定它应该操作哪个视图更好吗?当它实际上只是一个纯视图响应时,向控制器发送操作请求感觉有点矫枉过正。
    • IMO,控制器对视图一无所知,因此发送一个动作由控制器处理,然后控制器将动作传递给它的一个视图,这是违反直觉的。此外,如果一个是另一个的 childView,则您的解决方案可以正常工作,但如果不是,则不是
    • 刚刚想到这一点,我在按钮操作目标属性中做了这个 view.parentView.targetView 。工作:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-16
    • 1970-01-01
    • 2020-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多