3
App.CurtainView = Ember.View.extend
  name: "CurtainView"
  getName: ->
    console.log @get("name")

App.ButtonView = App.CurtainView.extend
  name: "ButtonView"
  getName: ->
    # Do something
    @_super()

コンソールに戻ります:

ButtonView

...しかし、私は期待しています:

CurtainView

これはコンテキストの問題だと思います-親オブジェクトのコンテキストを使用して_super()を作成するにはどうすればよいですか?

4

1 に答える 1

2

私はあなたの目標を完全には達成していません。この動作はRuby言語で期待するものと同じですが、実際にはJavaで得られるものとは異なります(サブクラスで属性を再定義すると仮定しますnameButton) ...

実際、得られる動作をよりよく理解するには、Emberのオブジェクトモデルがどのように実装されているかを知っておく必要があります。

App = Ember.Application.create();

App.CurtainView = Ember.View.extend({
  name: "CurtainView",
  getName: function() {
    console.log(this.get("name"));
  }
});

App.ButtonView = App.CurtainView.extend({
  name: "ButtonView",
  getName: function() {
    this._super();
  }
});

var c = App.CurtainView.create(),
    b = App.ButtonView.create();

console.log(c.getName.toString());
console.log(b.getName.toString());

c.getName();
b.getName();
b.getName.apply(c);

呼び出しは、_superデフォルトで、現在の関数が呼び出されたオブジェクトに適用されます。

またはgetNameを呼び出し、適切なターゲットを渡すことで、このデフォルトの動作をオーバーライドできます。しかし、それは私にはかなり奇妙に思えます...applycall

JSFiddleはこちら

于 2012-10-09T12:06:45.687 に答える