2012-06-15 24 views
0

Google Closure庫提供導出符號選項,通過窗口對象提供對構造函數的訪問。Javascript我應該採用哪些其他技巧而不是導出符號

例如:出口任務將允許進行window.task

這是從谷歌關閉圖書館完全遠。我使用Backbone.js構建任務應用程序。我的觀點,模型,路由器和分裂在許多文件,我按照上述過程分配實例,源窗口對象,以便可以訪問另一個。

  • 如何通過窗口訪問單個應用程序的模型,視圖,路由器?你使用了什麼技巧,使他們成爲一種沙盒

回答

2

您幾乎總是必須在窗口中暴露至少一件東西。

但是,您可以使用命名空間來幫助。

// 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! 

唯一的問題是你在函數內部做的任何事情都不可用。

讓我知道你是否對任何實現有任何疑問。

1

無論你使用什麼 - 全局範圍(在瀏覽器中的「窗口」)或其他一些對象來容納你的命名空間,總會有機會碰撞。使用別的東西只會讓你不再意識到默認的屬性窗口已經有了。

任何模塊的最佳實踐是向外部視圖(通過窗口或其他)暴露只有單個對象,並具有其他所有屬性,因爲這可以將衝突的可能性降至最低。

相關問題