Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/403.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript除了导出符号,我还应该使用哪些其他技巧_Javascript_Architecture_Backbone.js_Underscore.js - Fatal编程技术网

Javascript除了导出符号,我还应该使用哪些其他技巧

Javascript除了导出符号,我还应该使用哪些其他技巧,javascript,architecture,backbone.js,underscore.js,Javascript,Architecture,Backbone.js,Underscore.js,Google闭包库提供了导出符号选项,可以通过窗口对象访问构造函数 例如:导出任务将允许执行窗口。任务 但是这完全不是谷歌关闭库。我正在使用Backbone.js构建一个任务应用程序。我的视图、模型、路由器和文件被分割成许多文件,我按照上面的过程将实例、源分配给窗口对象,以便一个人可以访问另一个 如何不通过窗口访问单个应用程序的模型、视图和路由器?你用了哪些技巧和技巧使它们成为沙盒 无论您使用什么-全局范围(浏览器中称为“窗口”)或其他对象来保存名称空间,都会有冲突的机会。使用其他工具只会使您

Google闭包库提供了导出符号选项,可以通过窗口对象访问构造函数

例如:导出任务将允许执行
窗口。任务

但是这完全不是谷歌关闭库。我正在使用Backbone.js构建一个任务应用程序。我的视图、模型、路由器和文件被分割成许多文件,我按照上面的过程将实例、源分配给窗口对象,以便一个人可以访问另一个

  • 如何不通过窗口访问单个应用程序的模型、视图和路由器?你用了哪些技巧和技巧使它们成为沙盒

无论您使用什么-全局范围(浏览器中称为“窗口”)或其他对象来保存名称空间,都会有冲突的机会。使用其他工具只会使您不必在意“窗口”已有的默认属性


任何模块的最佳实践都是只向外部视图(通过窗口或其他方式)显示单个对象,并将其他所有对象作为其属性,因为这将冲突的可能性降至绝对最小。

无论您使用什么-全局范围(浏览器中的“窗口”)或其他对象来保存名称空间,总会有碰撞的机会。使用其他工具只会使您不必在意“窗口”已有的默认属性


任何模块的最佳实践都是仅将单个对象暴露在外部视图中(通过窗口或其他方式),并将其他所有对象作为其属性,因为这将碰撞的可能性降至绝对最小。

您几乎总是必须在窗口中至少暴露一个对象

但是,您可以使用名称空间来提供帮助

// app.js
var App = App || {};
App.Views = App.Views || {};
App.Models = App.Models || {};

App.Views.HomeView = Backbone.View.extend({});
App.Model.User = Backbone.Model.extend({});
唯一的情况是,如果您使用的是requireJS,那么您不一定会这样做

// app.js
define(['views/home'], function (home) {
    var home = new home({
        el: '#home'
    });
});
// views/home.js
define(['backbone'], function (Backbone) {
    var home = Backbone.View.extend({});
    return home;        
});
尽管如此,我想如果你真的想,你可以在一个自动执行的函数中做任何事情

(function ($, Backbone) {
    // Do your stuff here instead?.
    // Just keep in mind, nothing you do in here will be available outside.
    var home = Backbone.View.extend({});
    new home(); // Works...
}(jQuery, Backbone);
new home(); // FAIL!
唯一的问题是,在函数内部执行的任何操作在函数外部都不可用


如果您对任何实现有任何疑问,请告诉我。

您几乎总是需要在窗口中至少显示一个内容

但是,您可以使用名称空间来提供帮助

// app.js
var App = App || {};
App.Views = App.Views || {};
App.Models = App.Models || {};

App.Views.HomeView = Backbone.View.extend({});
App.Model.User = Backbone.Model.extend({});
唯一的情况是,如果您使用的是requireJS,那么您不一定会这样做

// app.js
define(['views/home'], function (home) {
    var home = new home({
        el: '#home'
    });
});
// views/home.js
define(['backbone'], function (Backbone) {
    var home = Backbone.View.extend({});
    return home;        
});
尽管如此,我想如果你真的想,你可以在一个自动执行的函数中做任何事情

(function ($, Backbone) {
    // Do your stuff here instead?.
    // Just keep in mind, nothing you do in here will be available outside.
    var home = Backbone.View.extend({});
    new home(); // Works...
}(jQuery, Backbone);
new home(); // FAIL!
唯一的问题是,在函数内部执行的任何操作在函数外部都不可用

如果您对任何实现有任何疑问,请告诉我