如何将params传递给ember.js中的路由器操作

时间:2013-02-21 22:52:02

标签: javascript ember.js

在我的模板中:

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

在路由器

doSomething: function(jqEvent){

}

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

感谢。

3 个答案:

答案 0 :(得分:0)

使用Ember的most recent version它完全正常,所以我怀疑你使用的是旧版本的Ember。

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

App.ApplicationRoute = Ember.Route.extend({
    events: {
        example: function(object) {
            console.log(object.get('name'));            
        }
    }
});

答案 1 :(得分:0)

传递给{{action}}的参数不会被视为文字;它们被视为当前环境中对象的关键。

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

因此,

{{action doSomething someProperty}}

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

答案 2 :(得分:0)

这是Ember的旧版本。不禁这样,我正在等待我们的Ember升级合并进来。 但这不是原因,尽管路由器会发生变化。

实际上是两部分,

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

    {{action doSomething someProperty}}

    doSomething:function(router,jqEvent){   var someProperty = jqEvent.context; }