Ember.js:回调函数中的this._super

时间:2014-06-10 15:06:32

标签: javascript ember.js callback super

我试图弄清楚当从回调中调用Ember的对象方法时如何使用this._super

我知道在调用回调之前我可以指定var _super = this._super,但我不喜欢它。

我希望this对象在回调中包含正确的_super方法。

我的代码在这里:http://emberjs.jsbin.com/hasehija/6/edit

App.BaseMixin = Ember.Mixin.create({
  init: function() {
    console.log("base");
  }
});

App.Utils = Ember.Object.extend({
  callbackMethod: function(callback, ctx) {
    // asynchronous callback
    Ember.run(function() {
      callback.call(ctx);
    });
  }
});

App.MyObject = Ember.Object.extend(App.BaseMixin, {
  init: function() {
    console.log("MyObject");
    var _super = this._super;
    App.Utils.create().callbackMethod(function() {
      this._super(); // this._super is undefined here
      // _super() would work
    }, this);
  }
});

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

你知道有什么方法可以解决它吗?


更新:

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

1 个答案:

答案 0 :(得分:2)

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);
  }
});

App.Utils.create().callbackMethod(function() {
  this._super(); 
}, this);

http://emberjs.jsbin.com/hasehija/7/edit

或者避免覆盖init

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