如何识别点击事件ember.js的识别调用者

时间:2013-08-30 00:51:31

标签: javascript ember.js onclick

我是ember.js的新手,想知道如何识别哪个div创建了点击事件。

的index.html

------------旧代码-----------------------

 {{#each App.menuController}} 
     {{#view App.menuClickable}}
        <div id={{bindAttr id="idTagName"}}>
           {{title}}
        </div>
     {{/view}}
 {{/each}}

----------更新后的代码---------------------

 {{#each App.menuController}} 
        <div id={{bindAttr id="idTagName"}} {{action selectMenuItem target="App.menuClickable"}}>
           {{title}}
        </div>
 {{/each}}

app.js

App.MenuOption = Ember.Object.extend({
    title: null,
    idName: null
});

App.menuController = Ember.ArrayController.create({
   content:[],
   init : function() 
   {
        // create an instance of the Song model
        for(var i=0; i<menuOptions.length; i++) {
            console.debug(menuOptions[i]);
            this.pushObject(menuOptions[i]);
        }

   },
   click: function(e)
   {
     alert("here");  
   }
});


App.menuClickable = Ember.View.extend({
  click: function(evt) {
    alert("ClickableView was clicked!");
    console.debug(evt);
  },
  classNames: ['navButton'],
  selectMenuItem: function()
  {
    alert("selected Menu clicked");
  }
});

正如您所看到的,这将打印出几个具有不同标签名称的div。我想将onclick动作事件与每个div相关联。

从四处查看似乎有两种方式:

  1. 创建一个类似于我的视图并覆盖点击功能(e){}。但是,如果我得到这条路线,我不知道如何区分不同的div和触发它的原因。我可以查看事件的属性(target-&gt; attribute-&gt; Id),但我觉得应该有一个更清洁的方式
  2. 使用操作{{action click&#34; idTagName&#34;}}。但是,我在App.menuClickable中实现此操作时遇到问题。它没有被触发,我不知道为什么。我收到以下错误:

    错误:没有处理该事件&#39;点击&#39;。     抛出新错误(&#34;没有处理事件&#39;&#34; +名称+&#34;&#39;。&#34;);

  3. 我以为你会像我在App.menuClickable中那样实现点击操作。还有另一个地方应该实施吗?

1 个答案:

答案 0 :(得分:2)

{{action selectMenuItem "idTagName"}}方法是去这里的方法。默认情况下,{{action}}帮助器将在控制器的selectMenuItem哈希中查找actions函数。如果没有找到,它将被发送到路由器,路由器将检查当前路由以及路由的selectMenuItem哈希中actions函数的任何父路由。

如果要在视图上触发某个功能,请将其指定为{{action selectMenuItem "idTagName" target="view"}}

之类的目标