2013-05-10 73 views
0

所以我開始使用Backbone/CoffeeScript創建這個新應用程序。我使用的是Sinatra的後端,因此我的Coffeescript編譯器是默認的命令行,它只是創建js文件。我試圖創建一個應用程序,其中有一個其他類繼承的主類。出於某種原因,我收到了一些錯誤。下面是錯誤Backbone/Coffeescript中的繼承問題

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> 

如果有人能澄清我的問題是什麼那會很好。

+1

這是你的真實密碼?如果是的話,你必須縮進班級的方法。領先的空格在Coffeescript中很重要。 – 2013-05-10 14:17:27

+0

不......我猜這裏搞糊塗了。我相信,我的代碼中的縮進是正確的。它肯定不會像上面那樣.. – 2013-05-10 14:47:55

+0

不要混合標籤和空格,至少。 – 2013-05-10 14:50:08

回答

0

我已經通過編譯我的.coffee文件到一個.js文件來解決這個問題。它似乎與繼承這只是一個能夠看到我試圖繼承的類的問題。由於Coffeescript將所有文件放在閉包中,因此我的類無法訪問其他要繼承的類。

我試圖在第一次命名空間來處理它,但每個人都知道那是多麼容易的CoffeeScript ...

最終,我剛好做一個.js文件(一個更好的結果無論哪種方式)解決它。

如果其他人需要將許多文件編譯成一個文件,這裏是我使用的bash命令。它在當前目錄的「libs /」目錄中放置一個「app.js」文件,並編譯當前目錄的「src /」目錄中的所有文件。

coffee --output libs --join app.js --compile --watch src/ 

感謝大家的幫助。

0

試試這個

@$el.html(@template()) 

代替

@$el.html(@template) 

此外,你會想傳遞參數給模板

@$el.html(@template(parameter1: 'value1', parameter2: 'value2')) 

通常在你看來,你有一個模型,如果你的模型是辦公室,這是你可以做的骨幹模型:

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

這只是一個例子。我不知道你是否通過這個觀點。