Javascript Ember.js:这是回调函数中的

Javascript Ember.js:这是回调函数中的,javascript,ember.js,callback,super,Javascript,Ember.js,Callback,Super,我正在试图弄清楚如何使用this.\u super当从回调调用Ember的object方法时 我知道我可以在调用回调之前分配var\u super=this.\u super,但我不喜欢这样 我想让这个对象在回调中包含适当的\u super方法 我的代码在这里: 你知道怎么修吗 更新: 原来它是在Ember 1.5.0中修复的(@GJK:谢谢你的回答),而我使用的是Ember 1.4.0。extend定义了一个类 App.Utils = Ember.Object.extend({ call

我正在试图弄清楚如何使用
this.\u super
当从回调调用Ember的object方法时

我知道我可以在调用回调之前分配
var\u super=this.\u super
,但我不喜欢这样

我想让
这个
对象在回调中包含适当的
\u super
方法

我的代码在这里:

你知道怎么修吗


更新:


原来它是在Ember 1.5.0中修复的(@GJK:谢谢你的回答),而我使用的是Ember 1.4.0。

extend
定义了一个类

App.Utils = Ember.Object.extend({
  callbackMethod: function(callback, ctx) {
    callback.call(ctx);
  }
});
create
生成类的实例

App.Utils = Ember.Object.create({
  callbackMethod: function(callback, ctx) {
    callback.call(ctx);
  }
});

或者避免重写init

App.ApplicationController = Ember.Controller.extend({
  doSomething: function() {
    new App.MyObject();
  }.on('init')
});

在您的jsbin中,我只得到一个错误,即
App.Utils.callbackMethod
未定义,而不是
this.\u super
无法工作?是的,我还得到您的代码无法工作。。。因为回调方法是一个实例方法而不是静态方法,所以您需要创建该方法的实例。无论如何,为什么不在init方法的顶部创建一个对
this
的引用,并使用
var self=this
。然后您仍然可以访问该对象上的所有内容,而不仅仅是超级函数。应该注意的是,如果您计划异步调用
this.\u super()
,它将无法工作。老实说,建议您不要重写
init
,如果您想在init上做些什么,您应该创建一个方法,并在('init')上附加
(下面添加的示例)嗨,谢谢。显然,我在提供的代码中犯了一个错误。我可以做
App.Utils.create()
new App.Utils()
,但这不是重点。正如@GJK所提到的,这个问题似乎是在Ember 1.5.0中修复的。我不明白,1.5是一个突破性的改变,它不会修复您描述的问题。你从来没有异步回过电话。是的,你显然是对的。在所示的示例中,我使用了同步回调。在实际项目中,我有一个异步回调。我不知道这是背后的真正原因。
App.Utils.create().callbackMethod(function() {
  this._super(); 
}, this);
App.ApplicationController = Ember.Controller.extend({
  doSomething: function() {
    new App.MyObject();
  }.on('init')
});