ben*_*sen 15 extends coffeescript backbone.js
我收到错误:
Uncaught TypeError: Cannot read property 'constructor' of undefined
Run Code Online (Sandbox Code Playgroud)
声明以下类时:
class ViewHelpers extends Backbone.Events
Run Code Online (Sandbox Code Playgroud)
我可以使用相同的语法来扩展Backbone.Router,Views,Model等.这是我在快速日志中编写的已编译的javascript,以确保Backbone.Events在那里
__t('views').ViewHelpers = (function(_super) {
#how i know it is definied here
console.log(_super.trigger)
__extends(ViewHelpers, _super);
function ViewHelpers() {
return ViewHelpers.__super__.constructor.apply(this, arguments);
}
return ViewHelpers;
})(Backbone.Events);
Run Code Online (Sandbox Code Playgroud)
因此引起错误的行是
ViewHelpers.__super__.constructor.apply(this, arguments);
Run Code Online (Sandbox Code Playgroud)
__extends()方法有什么不同,它适用于Backbone.View而不是Backbone.Events?
epi*_*ian 38
那是因为Backbone.Events它不是一个"类",所以它不能被扩展,它是一个可以混合到其他对象中的"模块"(参见这里的文档).在JavaScript术语中,这意味着它不是a Function,可以被称为构造函数(new Backbone.Events即将抛出错误),它只是一个普通的JS对象,其属性(方法)可以分配给其他对象以使它们成为事件调度程序.
在CoffeeScript中,您可以在Backbone.Events创建对象时将其混合到对象中:
class ViewHelpers
constructor: ->
_.extend @, Backbone.Events
Run Code Online (Sandbox Code Playgroud)
或者你可以扩展类的原型并避免将这些方法作为所有ViewHelpers实例的(自己的)属性:
class ViewHelpers
_.extend @prototype, Backbone.Events
Run Code Online (Sandbox Code Playgroud)
这两种方法应该有效,让您实例化ViewHelpers并将其用作事件调度程序:
vh = new ViewHelpers
vh.on 'foo', -> alert 'bar'
vh.trigger 'foo'????????????????????????????????
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5001 次 |
| 最近记录: |