将动作发送到Ember.js中的视图

时间:2013-07-21 21:02:13

标签: view ember.js action emblem.js

我有一个包含关闭按钮的视图:

.flash-message
  div class="close-button" click="view.removeFlash"
  = view view.content.thisView

视图本身显示:

Whistlr.AlertView = Ember.View.extend
  templateName: "_alert"

  removeFlash: ->
    alert "Close!"

然而,当我点击“关闭按钮”div时,没有任何反应。我试过用几种不同的方法重写按钮:

click="view.removeFlash"
click="removeFlash"
click="removeFlash" target="view"

我也尝试将动作直接放在控制器中(虽然我甚至不确定视图是否有控制器):

Whistlr.AlertController = Ember.ObjectController.extend
  removeFlash: ->
    alert "I work!"

这些方法都不起作用。也许甚至不可能像控制器一样向视图发送动作?如果没有,我还能怎样处理这个问题?

2 个答案:

答案 0 :(得分:4)

向视图发送事件的语法是{{action myEvent target="view"}}。然后,相应视图中的myEvent处理程序可以处理此事件。如果没有目标,事件将在该视图的上下文中转到控制器。

我怀疑发生的事情是Emblemtarget属性放在元素本身而不是动作处理程序中。由于target也是有效属性。您可以通过查看开发工具的Elements选项卡中生成的html来确认这一点。

不幸的是,我没有使用Emblem的解决方法。但这些东西肯定适用于Handlebars模板。

答案 1 :(得分:1)

Emblem中的正确代码为click="removeFlash target='view'",您不能将其分为两个属性。

同样在您的控制器/视图中,您需要将removeFlash作为actions对象的一部分。

Whistlr.AlertView = Ember.View.extend
  templateName: "_alert"

  actions:
    removeFlash: ->
      alert "Close!"