Backbone.js扩展和这个

时间:2012-06-09 12:56:45

标签: backbone.js coffeescript

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

2 个答案:

答案 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:)