Google Closure 库提供导出符号选项以通过窗口对象提供对构造函数的访问。
例如:导出任务将允许做window.task
但这与谷歌闭包库相去甚远。我正在使用 Backbone.js 构建一个任务应用程序。我的视图、模型、路由器并拆分为许多文件,我按照上述过程将实例、源分配给窗口对象,以便可以访问另一个。
- 我如何不通过窗口访问单个应用程序的模型、视图、路由器?您使用了哪些技巧和技巧来使它们成为沙盒
Google Closure 库提供导出符号选项以通过窗口对象提供对构造函数的访问。
例如:导出任务将允许做window.task
但这与谷歌闭包库相去甚远。我正在使用 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!
唯一的问题是你在函数内部所做的任何事情都不能在函数外部使用。
如果您对任何实现有任何疑问,请告诉我。
无论您使用什么 - 全局范围(在浏览器中也称为“窗口”)或其他一些对象来保存您的命名空间,总会有发生冲突的机会。使用其他东西只会让您不必担心默认属性窗口已经有什么。
任何模块的最佳实践是仅将单个对象(通过窗口或其他)暴露给外部视图,并将其他所有内容作为其属性,因为这样可以将碰撞的可能性降至最低。