2012-09-17 117 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