Google Closure庫提供導出符號選項,通過窗口對象提供對構造函數的訪問。Javascript我應該採用哪些其他技巧而不是導出符號
例如:出口任務將允許進行window.task
但這是從谷歌關閉圖書館完全遠。我使用Backbone.js構建任務應用程序。我的觀點,模型,路由器和分裂在許多文件,我按照上述過程分配實例,源窗口對象,以便可以訪問另一個。
- 如何通過窗口訪問單個應用程序的模型,視圖,路由器?你使用了什麼技巧,使他們成爲一種沙盒
Google Closure庫提供導出符號選項,通過窗口對象提供對構造函數的訪問。Javascript我應該採用哪些其他技巧而不是導出符號
例如:出口任務將允許進行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!
唯一的問題是你在函數內部做的任何事情都不可用。
讓我知道你是否對任何實現有任何疑問。
無論你使用什麼 - 全局範圍(在瀏覽器中的「窗口」)或其他一些對象來容納你的命名空間,總會有機會碰撞。使用別的東西只會讓你不再意識到默認的屬性窗口已經有了。
任何模塊的最佳實踐是向外部視圖(通過窗口或其他)暴露只有單個對象,並具有其他所有屬性,因爲這可以將衝突的可能性降至最低。