0

我正在尝试使用.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
4

2 回答 2

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 在 MDN 上阅读。

于 2012-06-09T15:03:06.283 回答
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。关键是,如果您在调用函数时可以访问 this 的值,那么您应该能够将其传入。

我会检查自己,但我不理解coffeescript :)

于 2012-06-09T13:11:59.147 回答