【问题标题】:Nothing handled the event in Ember没有处理 Ember 中的事件
【发布时间】:2026-01-22 16:35:01
【问题描述】:

我对 Ember 有了基本的了解,但目前遇到了一些奇怪的问题。该应用程序非常基本(而且丑陋)。在特定路线 (/stack) 上,我列出了一堆属于该堆栈的卡片。 StackController 是一个数组控制器,因为它检索属于它的一堆卡片,本质上是

StackController = Ember.ArrayController.extend();

StackRoute = Ember.Route.extend({
    model: function(){
         return App.Card.find();
    }
}); 

然后在我的模板中,我只需使用#each 帮助器循环遍历它以显示卡片的属性('front'),如下所示:

<ul>
{{#each}}
 <li>{{front}}</li> <button {{action 'backside' this}}>View</button>
{{/each}}
</ul>

到目前为止,一切都在按应有的方式进行。但是,当我单击“查看”按钮触发“背面”事件时,会产生一个:

“没有处理事件'backside'”错误。有点沮丧,因为它应该这样做似乎很基本,哦,是的,我确实在我的 Controller 中明确指定了 'backside' 事件,如下所示:

StackController = Ember.ArrayController.extend({

   actions:{
      backside:function(){
           alert("backside event handled");
     }
    }
});

更详细的查看,这里是 jsBin:

http://jsbin.com/AHiTicU/5/edit

我做错了什么?

JSBIN 中的代码是准确的,但这里可能有一些拼写错误(不太可能,但请注意)。

【问题讨论】:

    标签: javascript ember.js handlebars.js dom-events


    【解决方案1】:

    您正在使用ember-1.0.0-rc.6,在该版本中使用您需要将您的操作处理程序放置在路由内部的一个对象中,该对象的键名为events,如下所示:

    App.StackRoute = Ember.Route.extend({
    
            model: function(){     
                    return App.Card.find();         // must substitute this with this.store.find('card'); 
            },
            events:{
                    backside:function(){            
                            alert('working');               
                    }
            }
    });
    

    更新jsbinhttp://jsbin.com/AHiTicU/6/edit

    我推荐你使用最新版本,目前1.2.0,你可以在emberjs网站首页http://emberjs.com/获取。

    所以你当前的代码可以工作http://jsbin.com/AHiTicU/9/edit

    【讨论】: