Backbone.js:将视图,集合,模型分离到不同的js文件,它们无法识别对方

hh5*_*188 5 javascript jquery backbone.js

我使用Backbone.js创建一个Web应用程序,将所有视图,集合和模型写入一个js文件,它成功了!

现在我想将它们分成不同的js文件,就像:

<script type="text/javascript" src="js/layermanagemodel.js"></script>       
<script type="text/javascript" src="js/layermanagecollection.js"></script>  
<script type="text/javascript" src="js/layermanageview.js"></script>    
<script type="text/javascript" src="js/boot.js"></script>
Run Code Online (Sandbox Code Playgroud)

并在jquery load中加载模型代码:

$(function(){
    //Model
        var manageModel = Backbone.Model.extend({
                default:{
                    'selectedId':'unknow'
                },
                selectLayer:function(uuid){
                     this.set({"selectedId": uuid});
                },
                delLayer:function(){

                }
        }); 
})
Run Code Online (Sandbox Code Playgroud)

萤火虫告诉我bug:

manageModel is not defined
[Break On This Error]   

model: manageModel
Run Code Online (Sandbox Code Playgroud)

在集合文件中

为什么如果将它们分成不同的文件,它们无法识别对方?我怎样才能解决这个问题?或者什么是正确的加载顺序?谢谢

mu *_*ort 9

添加函数包装器后:

$(function() {
    // ...
})
Run Code Online (Sandbox Code Playgroud)

您已经引入了新的范围,并且var这些函数中声明的所有内容仅在这些函数中可见.你可以通过使它们全局(即属性window)来解决这个问题:

$(function(){
    window.manageModel = Backbone.Model.extend({
        //...
    });
});
Run Code Online (Sandbox Code Playgroud)

或更好,引入应用程序命名空间:

$(function(){
    window.app = window.app || { };
    window.app.manageModel = Backbone.Model.extend({
        //...
    });
});
Run Code Online (Sandbox Code Playgroud)

然后是指贯穿东西app一样app.manageModel:

$(function(){
    window.app = window.app || { };
    window.app.someCollection = Backbone.Collection.extend({
        model: app.manageModel,
        //...
    });
});
Run Code Online (Sandbox Code Playgroud)