所以我正在使用Backbone / CoffeeScript启动这个新应用。我正在使用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: ->
以下是我的.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>
如果有人能澄清我的问题那就太棒了。
答案 0 :(得分:0)
试试这个
@$el.html(@template())
而不是
@$el.html(@template)
此外,您还需要将参数传递给模板
@$el.html(@template(parameter1: 'value1', parameter2: 'value2'))
通常在您的视图中,您有一个模型,如果您的模型是办公室,这是您可以做的骨干模型:
@$el.html(@template(var_referencing_office.toJSON()))
这只是一个例子。我不知道你是否通过了这个观点。
答案 1 :(得分:0)
我已经通过将.coffee文件编译成一个.js文件来解决这个问题。似乎继承它只是一个能够看到我试图继承的类的问题。由于Coffeescript将所有文件放在一个闭包中,我的类无法访问其他继承的类。
我最初尝试使用命名空间处理它,但每个人都知道使用coffeescript是多么容易......
最终,我通过制作一个.js文件来解决它(无论哪种方式都是更好的结果)。
如果其他人需要将多个文件编译成一个文件,那么我正在使用bash命令。它将文件“app.js”放在当前目录的“libs /”目录中,并编译当前dir的“src /”目录中的所有文件。
coffee --output libs --join app.js --compile --watch src/
感谢其他人的帮助。