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
如何访问主app js文件中的test
对象?是不是我必须在我的文件中以不同的方式定义我的test
对象?
更新
我可以通过删除var
将对象泄漏到全局命名空间,但这是推荐的方法吗?
答案 0 :(得分:4)
minispade的重点是将这些“文件”包含在它们自己的闭包中,这样它们就不会泄漏到全局名称空间中。让test
像没有var的那样泄漏是一个坏主意,你可能正在尝试使用minispade来解决错误的问题。
流行的minispade模式是定义一个全局可用的变量(在Ember术语中,这将是一个Ember命名空间或App
)。然后,每个minispade闭包都将通过添加模型,视图,控制器等构建到App上。例如。
App = Ember.Application.create();
然后在minispade中你将为vehicle.js
创建一个minispade闭包App.Vehicle = Ember.Object.extend();
我们还会为car.js创建一个minispade闭包。
require('vehicle');
App.Car = App.Vehicle.extend();
这将确保在我们尝试定义汽车之前装载并执行车辆。
你可能想看看这个:http://ryanto.github.com/#posts/rake-pipeline-assetfile(这是一项正在进行中的工作,但是有一节关于将minispade与rake管道一起使用)。