了解迷你过滤器



Minispade过滤器将每个文件的代码包装在一个闭包中。现在,对于文件中定义的应该全局公开的对象,它们不再是全局的,因为它们被包装在闭包中。

那么,我们如何实际要求在主应用程序文件中的单独文件中定义的对象呢?

这是我的例子。

在我的文件中,测试.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将对象泄漏到全局命名空间,但这是推荐的方法吗?

minispade 的全部意义在于将这些"文件"包含在它们自己的闭包中,这样它们就不会泄漏到全局名称空间中。让test像这样在没有var的情况下泄漏是一个坏主意,您可能正在尝试使用minispade来解决错误的问题。

流行的 minispade 模式是定义一个全局可用的变量(在 Ember 术语中,这将是一个 Ember 命名空间或App)。然后,您的每个minispade闭包将通过添加模型,视图,控制器等构建到App上。

App = Ember.Application.create();

然后在 minispade 中,您将为车辆创建一个 minispade 闭合.js

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

我们还将为汽车.js创建一个迷你铲式封盖。

require('vehicle');
App.Car = App.Vehicle.extend();

这将确保在我们尝试定义汽车之前加载和执行车辆。

你可能想看看这个:http://ryanto.github.com/#posts/rake-pipeline-assetfile(这是一项正在进行的工作,但有一个关于将minispade与耙子管道一起使用的部分)。

最新更新