2

指南说当一个动作被触发时,Ember 首先在当前控制器中寻找一个处理程序,然后如果它在控制器中找不到它,它会在当前路由中查找,然后是父路由,等等。我不是看到这种情况发生。

我的路线:

App.Router.map(function() {
    // Creates 'products' and 'products.index' routes
    this.resource('products', function(){
        // ...
    });
});

我的超级琐碎products.index模板;

<span {{action fooBar}}>Run fooBar</span>

为了测试这一点,我目前在浏览器中的 /#/products 中,并且 Ember 记录“已转换为 'products.index'”说我目前在 products.index 路线中,正如我所期望的那样。现在,如果单击该操作,Ember 应该在以下位置查找处理程序:

  1. 产品索引控制器
  2. 产品索引路线
  3. 产品路线

我的观察:

  • 如果我将处理程序放在 ProductsIndexController 中,它就可以工作。
  • 如果我将处理程序放在 ProductsIndexRoute 中,它就可以工作。
  • 但是,如果我将处理程序放在 ProductsRou​​te 中,它永远不会被调用:

.

App.ProductsRoute = Ember.Route.extend({
    events: {
        fooBar: function(){
            alert("alarm!");
        }
    }
});

相反,我看到了错误:

*Error: Nothing handled the event 'fooBar'.*

我错过了什么?

4

1 回答 1

1

我的其他 javascript 文件之一也在设置/创建 App.ProductsRou​​te (并且什么都不做),这导致了冲突。愚蠢的错误。

于 2013-03-11T18:21:31.120 回答