0

在我的模板中:

<a {{action doSomething someParam}}>my cool link</a>

在路由器中

doSomething: function(jqEvent){

}

但是,jqEvent 始终是 App.Router 的一个实例。我希望传入我的参数。我错过了什么?

谢谢。

4

3 回答 3

0

使用最新版本的 Ember 可以正常工作,所以我怀疑您使用的是旧版本的 Ember。

jsFiddle:http: //jsfiddle.net/G4esk/

App.ApplicationRoute = Ember.Route.extend({
    events: {
        example: function(object) {
            console.log(object.get('name'));            
        }
    }
});
于 2013-02-21T23:12:32.597 回答
0

您传递给的参数{{action}}不被视为文字;它们被视为当前上下文中对象的键。

请参阅https://github.com/emberjs/ember.js/issues/1759https://github.com/emberjs/ember.js/issues/1796

因此,

{{action doSomething someProperty}}

someProperty将尝试在当前控制器上查找属性。

于 2013-02-21T23:12:52.220 回答
0

它是旧版本的 Ember。没办法,我目前正在等待我们的 Ember 升级合并。但这不是原因,尽管路由器会改变。

其实是两部分

  1. 当动作冒泡到路由器时,动作被传递两个参数,路由器和jqEvent,参数附加在jqEvent.context。
  2. 当我在 chrome 控制台中检查参数时,我没有看到它,因为 Chrome 有一个优化(至少在控制台中)可以去除未使用的参数。这确实不是 Ember 的错,但它肯定掩盖了正在发生的事情。

    {{action doSomething someProperty}}

    doSomething:函数(路由器,jqEvent){ var someProperty = jqEvent.context; }

于 2013-02-22T02:58:33.223 回答