2012-09-17 51 views
2

Minispade過濾器將每個文件的代碼封裝在閉包中。現在,對於應該全局公開的文件中定義的對象,它們不再是全局的,因爲它們被封裝在閉包中。瞭解minispade過濾器

那麼,我們如何確實需要在我們的主應用程序文件中的單獨文件中定義對象?

這是我的例子。

在我的文件,test.js

var test = { sayHello: function(){alert('hello');} } 

我主要的應用程序文件,我做的:

require('todos/vendor/jquery-1.7.1'); 
require('todos/vendor/ember-0.9.5'); 
require('todos/vendor/test'); 

console.log(jQuery); // this logs the jQuery object 
console.log(Ember); // this logs the Ember object 
console.log(test); // this is undefined 

如何訪問我的主要的應用程序的js文件中的test對象?是否我必須以不同的方式在我的文件中定義我的test對象?

UPDATE:

我可以通過刪除var泄漏對象全局命名空間,但是,建議的方法?

回答

4

minispade的要點是在自己的關閉中包含這些「文件」,所以它們不會泄漏到全局名稱空間中。讓test像沒有var那樣泄漏是一個壞主意,你可能試圖用minispade來解決錯誤的問題。

流行的minispade模式是定義一個全局可用的變量(以Ember的術語,這將是一個Ember命名空間或App)。然後,通過添加模型,視圖,控制器等,您的每個minispade閉包將建立到應用程序上。例如。

App = Ember.Application.create(); 

然後在minispade你會給vehicle.js

App.Vehicle = Ember.Object.extend(); 

一個minispade閉合而我們也將創造一個car.js.關閉minispade

require('vehicle'); 

App.Car = App.Vehicle.extend(); 

這將確保車輛在我們嘗試定義汽車之前加載和執行。

你可能想看看這個:http://ryanto.github.com/#posts/rake-pipeline-assetfile(這是一個正在進行的工作,但有一個關於使用minispade和rake管道的部分)。

+0

我懷疑。感謝您的澄清。 – Rajat

+0

+1爲rake-pipeline-assetfile指南。一直在尋找那樣的東西。 – roguenet