Inheritance 主干/Coffeescript中的继承问题

Inheritance 主干/Coffeescript中的继承问题,inheritance,backbone.js,coffeescript,Inheritance,Backbone.js,Coffeescript,因此,我正在使用主干网/咖啡脚本启动这个新应用程序。我使用的是Sinatra的后端,所以我的Coffeescript编译器是默认的命令行编译器,它只创建js文件。我正在尝试创建一个应用程序,其中有一个其他类继承自的主类。由于某种原因,我犯了一些错误。以下是错误 TypeError: 'undefined' is not an object (evaluating 'n.replace') TypeError: 'undefined' is not an object (evaluating 'p

因此,我正在使用主干网/咖啡脚本启动这个新应用程序。我使用的是Sinatra的后端,所以我的Coffeescript编译器是默认的命令行编译器,它只创建js文件。我正在尝试创建一个应用程序,其中有一个其他类继承自的主类。由于某种原因,我犯了一些错误。以下是错误

TypeError: 'undefined' is not an object (evaluating 'n.replace')
TypeError: 'undefined' is not an object (evaluating 'parent.prototype')
TypeError: 'undefined' is not a constructor (evaluating 'new FileApp.UploaderView()')
这是我的基础课

class FileApp.Controller extends Backbone.View
template: _.template($('#FileAppTemplate').html())

initialize: (office) ->
    @office = office
    @render()

render:  ->
    # Attach view to DOM
    $('#fileUploaderApp').append(@$el)


bindViews: (uploaderView, fileViewerView, fileDetailView) ->
    @uploaderView = uploaderView
    @fileViewerView = fileViewerView
    @fileDetailView = fileDetailView
下面是一个继承类的示例

 class FileApp.FileViewerView extends FileApp.Controller 

template: _.template($('#FileViewTemplate').html())

# 
# render ->
# 
render: ->
    @$el.html(@template)
    # Append to fileViewer Div

    @renderFiles()

# 
# createFiles ->
# 
renderFiles: ->
下面是my.erb文件如何加载每个项目并实例化应用程序

<script id="namespacing">
    //All backbone classes attach to this variable
    var FileApp={};
</script>

<!-- Underscrore/Backbone -->
<script src="//cdnjs.cloudflare.com/ajax/libs/underscore.js/1.4.4/underscore-min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/backbone.js/1.0.0/backbone-min.js"></script>


<script src="/js/fileUploader/libs/file_app_view.js"></script>
<script src="/js/fileUploader/libs/uploader_view.js"></script>
<script src="/js/fileUploader/libs/file_detail_view.js"></script>
<script src="/js/fileUploader/libs/file_model.js"></script>
<script src="/js/fileUploader/libs/file_viewer_view.js"></script>
<script src="/js/fileUploader/libs/file_view.js"></script>


<div id="fileUploaderApp"></div>

<script>
    $(document).ready(function(){
        var App = new FileApp.Controller();

        // # Create Uploader
        var uploaderView = new FileApp.UploaderView();
        // # Create File Viewer
        var fileViewerView = new FileApp.FileViewerView();
        // # Create File Detail View
        var fileDetailView = new FileApp.FileDetailView();

        App.bindViews(uploaderView, fileViewerView, fileDetailView)
    });
</script>

//所有主干类都附加到此变量
var FileApp={};
$(文档).ready(函数(){
var App=new FileApp.Controller();
//#创建上传程序
var uploaderView=new FileApp.uploaderView();
//#创建文件查看器
var fileViewerView=new FileApp.fileViewerView();
//#创建文件详细视图
var fileDetailView=new FileApp.fileDetailView();
App.bindwiews(uploaderView、fileViewerView、fileDetailView)
});
如果有人能澄清我的问题,那就太好了

试试这个

@$el.html(@template())
而不是

@$el.html(@template)
此外,您还需要将参数传递给模板

@$el.html(@template(parameter1: 'value1', parameter2: 'value2'))
通常,在您的视图中,您有一个模型,如果您的模型是office,您可以执行以下操作:

@$el.html(@template(var_referencing_office.toJSON()))

这只是一个例子。我不知道您是否将office传递到此视图。

我已通过将.coffee文件编译成一个.js文件来解决此问题。似乎继承只是一个能够看到我试图从中继承的类的问题。由于Coffeescript将所有文件放在一个闭包中,因此我的类无法访问其他类以从中继承

起初我试图用名称空间来处理它,但大家都知道用coffeescript是多么容易

最终,我只制作了一个.js文件就解决了这个问题(无论哪种方式,效果都更好)

如果其他任何人需要将多个文件编译成一个文件,这里就是我正在使用的bash命令。它在当前目录的“libs/”目录中放置一个文件“app.js”,并编译当前目录的“src/”目录中的所有文件


谢谢大家的帮助。

这是您的真实代码吗?如果是,则必须缩进类的方法。前导空格在Coffeescript中很重要。不。。。我猜粘贴在这里会搞砸的。我相信代码中的缩进是正确的。上面看起来肯定不是这样。至少不要混合制表符和空格。它们不是混合的。我的标签是正确的。我仔细检查了一下。有时可能会发生coffeescript没有按照我们预期的方式编译,您是否检查了编译的js文件是否有错误?
 coffee --output libs --join app.js --compile --watch src/