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()?
答案 0 :(得分:2)
我没有完全实现你的目标。这种行为与您对Ruby语言的期望相同,但实际上与您使用Java 获得的行为不同(假设您将重新定义name
子类中的Button
属性) ...
事实上,您必须了解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
或apply
调用call
并传递适当的目标来覆盖此默认行为。但这对我来说似乎很奇怪......