rake - 了解迷你铲过滤器

标签 rake ember.js asset-pipeline

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 将对象泄漏到全局命名空间,但这是推荐的方法吗?

最佳答案

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

流行的 minispade 模式是定义一个全局可用的变量(用 Ember 术语来说,这将是一个 Ember 命名空间或 App)。然后,您的每个 minispade 闭包都将通过添加模型、 View 、 Controller 等来构建到应用程序上。例如。

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 管道一起使用)。

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

相关文章:

mongodb - Heroku 没有预编译我的 Assets 来为我的应用程序准备 Assets 管道

ruby-on-rails - 防止缓存单个js文件

javascript - session 后访问 session 用户名如何在其他 Controller 中进行身份验证

ruby-on-rails - Cucumber rake 任务失败,归咎于 JSON 解析器

css - 捆绑执行 rake Assets :precompile error

ruby - 在 OpenSUSE 上构建的鞋子 - Rake 错误

ember.js - 如何在 emberjs 中构建嵌套 View

javascript - Ember.js 1.0rc6 - 未定义 RSVP

ruby-on-rails - 如何根据用户正在进行的操作触发和配置 Bootstrap Tour?

ruby - 如何获取当前rake任务的PID?