我正在尝试使用.extend()来设置我的观点并使用它进行初始化。我发现分配配置变量以查看嵌套在层次结构深处的对象很方便。
我的问题是我的观点丢失了此上下文。这成为 ctor 对象,我认为它是构造函数。我该如何解决这个问题?
我的咖啡在下面。第一个类将嵌套在树的深处,第二个类位于应用程序启动的顶层:
# This is a child somewhere deep within a tree of views.
class View extends Backbone.View
initialize: ->
console.log @ # returns object ctor
MyView = View.extend({
initialize: ->
# do config stuff then init prototype
App.Views.MyView.prototype.initialize()
})
view = new MyView
答案 0 :(得分:4)
两件事:
首先,并不重要,您可以使用
class MyView extends View
而不是View.extend
。 CoffeeScript类和Backbone类是可互操作的。
第二 - 这是重要的部分 - 而不是
App.Views.MyView.prototype.initialize()
您应该只使用CoffeeScript关键字
super
这实际上做了同样的事情,但也确保在正确的上下文中调用函数。额外奖励:它还会为您传递所有函数参数。
如果你很好奇,super
在这里编译成
initialize.__super__.constructor.apply(this, arguments)
(其中__super__
是对CoffeeScript extends
)设置的超类的引用。阅读apply
at MDN。
答案 1 :(得分:0)
我的咖啡脚本不是很热,但你可以调用函数发送你希望作为第一个参数的值的视图
我想在标准化的js中
var view = null;
MyView = View.extend({
initialize: function() {
// do config stuff then init prototype
App.Views.MyView.prototype.initialize.call(view)
}
})
view = new MyView;
我不确定你在那时可以访问什么或生成的js。 关键是,如果您在调用函数时可以访问应该是该值的值,那么您应该能够将其传入。
我会检查自己,但我不理解coffeescript:)