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对象?

更新:

我可以通过删除var将对象泄漏到全局 namespace ,但这是推荐的方法吗?

最佳答案

minispade的全部要点是将这些"file"包含在其自己的闭包中,这样它们就不会泄漏到全局 namespace 中。让test这样不带var泄漏是一个坏主意,您可能正在尝试使用minispade解决错误的问题。

流行的minispade模式是定义一个全局可用的变量(以Ember而言,这将是Ember命名空间或App)。然后,通过添加模型, View , Controller 等,您的每个小铲闭合都将构建到App上。

App = Ember.Application.create();

然后在minispade中,您将为vehicle.js创建一个minispade闭包
App.Vehicle = Ember.Object.extend();

而且我们还将为car.js创建一个迷你铲封闭。
require('vehicle');

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

这将确保在尝试定义汽车之前已加载并执行了车辆。

您可能要看一下:http://ryanto.github.com/#posts/rake-pipeline-assetfile(这是一个正在进行的工作,但是有一节介绍了如何将minispade与rake管道一起使用)。

关于rake - 了解迷你铲过滤器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12457932/

10-12 06:48