javascript - Backbone.js: 将 View 、集合、模型分离到不同的js文件中,它们不能相互识别

标签 javascript jquery backbone.js

我用Backbone.js创建了一个web应用,所有的 View 、集合和模型都写到一个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>

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

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

                }
        }); 
})

但是 Firebug 告诉我错误:

manageModel is not defined
[Break On This Error]   

model: manageModel

在集合文件中

为什么如果将它们分开到不同的文件中,它们不能相互识别?我该如何解决这个问题?或者什么是正确的加载顺序?谢谢

最佳答案

添加函数包装器后:

$(function() {
    // ...
})

您引入了新的作用域,并且在这些函数内声明的所有 var 仅在这些函数内可见。您可以通过将它们设为全局(即 window 的属性)来解决这个问题:

$(function(){
    window.manageModel = Backbone.Model.extend({
        //...
    });
});

或者更好的是,引入一个应用程序命名空间:

$(function(){
    window.app = window.app || { };
    window.app.manageModel = Backbone.Model.extend({
        //...
    });
});

然后通过app引用事物,比如app.manageModel:

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

关于javascript - Backbone.js: 将 View 、集合、模型分离到不同的js文件中,它们不能相互识别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10646451/

相关文章:

javascript - JQuery UI 自动完成功能不适用于 Mac OSX 上的 Chrome

javascript - Backbone.js Collection View 渲染重复项

javascript - AngularJS 路由器代码不工作

javascript - 菜单(不是导航)的正确标记

javascript - 如何让我的代码更清晰

javascript - 使用 jquery 将标题标签内容替换为另一个标题标签内容时出现 IE 问题

Backbone.Js 使用 destroy() 发送数据

如果用户更改文本区域中的文本,JavaScript 函数将失败

javascript - HTML 允许用户在文件中键入或粘贴

javascript - 使用 animate.css(描述中的链接)如何在特定事件完成时触发动画