Javascript &引用;“主干未定义”;如果我将主干代码放在“外部”$(函数(){})";或$(文件).ready“;

Javascript &引用;“主干未定义”;如果我将主干代码放在“外部”$(函数(){})";或$(文件).ready“;,javascript,backbone.js,frontend,Javascript,Backbone.js,Frontend,我刚刚开始学习主干,现在我的代码是: $(function(){ var User = Backbone.Model.extend({ // whatever }); new AppView(); }); 当所有内容都在“$(function(){})”块内时,它工作正常。但我总是习惯于将代码保存在执行块之外的自己的名称空间中 问题是,当我移动任何代码(无论是模型、集合还是视图)时,它都会中断,浏览器日志会警告我“主干未定义” 破坏代码的示例: va

我刚刚开始学习主干,现在我的代码是:

$(function(){

    var User = Backbone.Model.extend({
       // whatever
    }); 

    new AppView();
});
当所有内容都在“$(function(){})”块内时,它工作正常。但我总是习惯于将代码保存在执行块之外的自己的名称空间中

问题是,当我移动任何代码(无论是模型、集合还是视图)时,它都会中断,浏览器日志会警告我“主干未定义”

破坏代码的示例:

var User = Backbone.Model.extend({
   // whatever
}); 

$(function(){
    new AppView();
});
抱歉,如果这对于已经了解主干网的人来说是一个非常明显的问题,那么这有什么特别的原因吗?有什么解决办法吗

编辑:作为对文森特的回应,我不确定这是否是他的意思,但我尝试了这个,仍然得到了相同的错误:

var MyInitClass = {

    User : Backbone.Model.extend({
        defaults : {
            name: 'user_name',
            email: 'user_email'
        }
    }),

    init : function() {
        new this.AppView();
    }

};

$(function(){
    MyInitClass.init();
});

第二次编辑:我没有像第一次那样手动链接到外部主干js,而是在Gemfile中包含了“主干rails”gem,然后在application.js文件中添加了需要主干和下划线的行。现在一切都很顺利。

这只意味着当您尝试执行主干代码时,您的backbone-min.js没有加载

您应该做的和我通常做的是创建一个初始化类,并将
MyInitClass.init()
放入
$(function(){})
块中

然后在这个
MyInitClass
中,将数据加载到主干模型中,创建它们和相关视图等

通过在
$(function(){})
块中执行代码,可以确保主干文件已加载并准备好使用

回答问题编辑:

您需要将模型创建放在init函数中,如下所示:

var MyInitClass = {

init : function() {
    var user = Backbone.Model.extend({
      defaults : {
        name: 'user_name',
        email: 'user_email'
      }
    });
    new this.AppView();
}

};

$(function(){
    MyInitClass.init();
});
这是我在应用程序中为用户使用的代码类型,例如:

if(!MyAppClass) var MyAppClass = {};
MyAppClass.users = (function($) {
    var user;

    var initialize = function() {
        user = new MyAppClass.Model.User();
        renderUser();
    };

    var renderUser = function() {
        var UserView = new MyAppClass.Views.UserView({
                model: user
        });
    };

    return {
        initialize: initialize
    };

})(jQuery);
在文档就绪块中:

$(function(){
    MyAppClass.users.initialize()
});

这只意味着在您尝试执行主干代码时没有加载backbone-min.js

您应该做的和我通常做的是创建一个初始化类,并将
MyInitClass.init()
放入
$(function(){})
块中

然后在这个
MyInitClass
中,将数据加载到主干模型中,创建它们和相关视图等

通过在
$(function(){})
块中执行代码,可以确保主干文件已加载并准备好使用

回答问题编辑:

您需要将模型创建放在init函数中,如下所示:

var MyInitClass = {

init : function() {
    var user = Backbone.Model.extend({
      defaults : {
        name: 'user_name',
        email: 'user_email'
      }
    });
    new this.AppView();
}

};

$(function(){
    MyInitClass.init();
});
这是我在应用程序中为用户使用的代码类型,例如:

if(!MyAppClass) var MyAppClass = {};
MyAppClass.users = (function($) {
    var user;

    var initialize = function() {
        user = new MyAppClass.Model.User();
        renderUser();
    };

    var renderUser = function() {
        var UserView = new MyAppClass.Views.UserView({
                model: user
        });
    };

    return {
        initialize: initialize
    };

})(jQuery);
在文档就绪块中:

$(function(){
    MyAppClass.users.initialize()
});

这只意味着在您尝试执行主干代码时没有加载backbone-min.js

您应该做的和我通常做的是创建一个初始化类,并将
MyInitClass.init()
放入
$(function(){})
块中

然后在这个
MyInitClass
中,将数据加载到主干模型中,创建它们和相关视图等

通过在
$(function(){})
块中执行代码,可以确保主干文件已加载并准备好使用

回答问题编辑:

您需要将模型创建放在init函数中,如下所示:

var MyInitClass = {

init : function() {
    var user = Backbone.Model.extend({
      defaults : {
        name: 'user_name',
        email: 'user_email'
      }
    });
    new this.AppView();
}

};

$(function(){
    MyInitClass.init();
});
这是我在应用程序中为用户使用的代码类型,例如:

if(!MyAppClass) var MyAppClass = {};
MyAppClass.users = (function($) {
    var user;

    var initialize = function() {
        user = new MyAppClass.Model.User();
        renderUser();
    };

    var renderUser = function() {
        var UserView = new MyAppClass.Views.UserView({
                model: user
        });
    };

    return {
        initialize: initialize
    };

})(jQuery);
在文档就绪块中:

$(function(){
    MyAppClass.users.initialize()
});

这只意味着在您尝试执行主干代码时没有加载backbone-min.js

您应该做的和我通常做的是创建一个初始化类,并将
MyInitClass.init()
放入
$(function(){})
块中

然后在这个
MyInitClass
中,将数据加载到主干模型中,创建它们和相关视图等

通过在
$(function(){})
块中执行代码,可以确保主干文件已加载并准备好使用

回答问题编辑:

您需要将模型创建放在init函数中,如下所示:

var MyInitClass = {

init : function() {
    var user = Backbone.Model.extend({
      defaults : {
        name: 'user_name',
        email: 'user_email'
      }
    });
    new this.AppView();
}

};

$(function(){
    MyInitClass.init();
});
这是我在应用程序中为用户使用的代码类型,例如:

if(!MyAppClass) var MyAppClass = {};
MyAppClass.users = (function($) {
    var user;

    var initialize = function() {
        user = new MyAppClass.Model.User();
        renderUser();
    };

    var renderUser = function() {
        var UserView = new MyAppClass.Views.UserView({
                model: user
        });
    };

    return {
        initialize: initialize
    };

})(jQuery);
在文档就绪块中:

$(function(){
    MyAppClass.users.initialize()
});

破译代码的例子:“哪里?这不是一个特定于主干网的问题。这几乎可以肯定是一个操作顺序问题。向我们展示如何加载库JS。这是在Rails web应用程序上。我包含主干js的HAML代码是:=javascript\u include\u tag“application”=javascript\u include\u tag”“=javascript\u include\u tag”“=javascript\u include\u tag”“,感谢所有帮助过我的人。我解决了这个问题-请参阅下面我对Vincent的回复。是的,我仍然是一个新手,是的,我仍然在尝试和错误中学习如果你解决了你的问题,你应该发布一个答案,而不是改变你的问题。您可以接受自己的答案,这样做会将您的问题标记为在UI中已回答。”中断代码示例:“何处?这不是特定于主干网的问题。这几乎可以肯定是一个操作顺序问题。向我们展示如何加载库JS。这是在Rails web应用程序上。我包含主干js的HAML代码是:=javascript\u include\u tag“application”=javascript\u include\u tag”“=javascript\u include\u tag”“=javascript\u include\u tag”“,感谢所有帮助过我的人。我解决了这个问题-请参阅下面我对Vincent的回复。是的,我仍然是一个新手,是的,我仍然在尝试和错误中学习如果你解决了你的问题,你应该发布一个答案,而不是改变你的问题。您可以接受自己的答案,这样做会将您的问题标记为在UI中已回答。”中断代码示例:“何处?这不是特定于主干网的问题。这几乎可以肯定是一个操作顺序问题。向我们展示如何加载库JS