console.log @get("name")-6ren">
gpt4 book ai didi

ember.js - 如何使用父对象上下文创建 _super() ?

转载 作者:行者123 更新时间:2023-12-02 22:01:33 25 4
gpt4 key购买 nike

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() ?

最佳答案

我不完全明白你的目标。此行为与您对 Ruby 语言的期望相同,但实际上与您使用 Java 获得的行为不同(假设您将重新定义 Button 中的 name 属性)子类)...

事实上,您必须了解 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 调用默认应用于已调用当前函数的对象。

您可以通过 applycall 调用 getName 并传递适当的目标来覆盖此默认行为。但我觉得这很奇怪......

JSFiddle here

关于ember.js - 如何使用父对象上下文创建 _super() ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12796048/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com