3

我一直在尝试重新设计我尚未完成的 ember 应用程序以使用 require.js

它主要是为了兴趣价值,当我想为我的车把模板使用 require-text 时,为了方便起见,我开始研究它。所以我还没有发现自己正在研究它以获得任何与 AMD 相关的性能胜利或类似的东西。但是现在我已经开始通过定义模块来设置我的模块了,我发现它更容易阅读并愿意坚持下去。

有一个关于堆栈溢出的问题,被问到的人回来并发布了他们的发现Ember.js 和 RequireJS但没有其他示例,例如 todo MVC 上的示例,可以在有关如何优化结构和引用文件的参考资料中找到更复杂的应用程序。

所以无论如何,我的问题是:正确使用 require JS 的规则是什么。它实现了什么(除了访问 AMD)?对于一个并不真正需要它的测试项目,我很难理解它,但我想学习正确的 ember 相关原理,以便将来使用它。

我从示例代码中看到,这个想法可能是从模块中删除对全局命名空间的所有引用。那是对的吗?周围没有足够的例子让我发现一个模式。

目前,我结构顶层的文件可能包含类似这样的内容

<script>
define(['jquery',
    'app/controllers/mailshotlist',
    'app/controllers/sites',
    'ember'],
function($, MailShotList, Sites) {
  var App = Em.Application.create({
  Views: Em.Namespace.create(),
  Models: Em.Namespace.create(),
  Controllers: Em.Namespace.create(),
  init: function() {
    this._super();
    this.Controllers.set('Sites',Sites.create());
    this.Controllers.set('MailShotList',MailShotList.create({
      sitesControllerBinding: 'App.Controllers.Sites'
    }));   
  }
});
return window.App = App;
});
</script>

因此,尝试在应用程序的初始化中将显式 app.x 引用拼接在一起。因为我猜如果您的模块都在代码中显式地相互引用,那么它的模块化不正确。我目前还没有到想要重用模块的阶段,但我认为这是目标之一

我不希望这变成关于 AMD 是否值得的辩论,我的问题是关于需要遵循哪些规则才能充分利用 ember 和 require js。尽管如果有充分的具体原因不将 ember 与 require 一起使用,那将会很有趣。

我想我有点啰嗦,冒着把它锁定为“非生产性”的风险,但如果你能理解我的问题以及我想要理解的内容(或者如果我完全找错了树),那么请发布回答

4

4 回答 4

5

我还没有做出自己的看法,但这就是 Ember.js 开发人员 Tom Dale 对此事的看法。

http://tomdale.net/2012/01/amd-is-not-the-answer/

于 2012-05-07T09:22:43.737 回答
3

如果你还想使用 EmberJS 和 RequireJS,

我刚刚将 EmberJS+RequireJS 的入门套件上传到 github,您可以查看它https://github.com/fernandogmar/Emberjs-RequireJS

这是我对足够大的项目的特别建议......

任何好的建议将不胜感激。玩得开心!

于 2012-12-09T21:06:48.060 回答
2

没有什么让 emberjs / requirejs 关系特别,它们是正交的。Ember 是否解决了脚本文件之间的依赖关系?不,requirejs 是 MVC 框架吗?不,那有什么问题?将 requirejs 与 emberjs 一起使用与将 requirejs 与任何不提供 AMD 的库一起使用没有什么不同。所以这里没什么特别的。你想要AMD吗?使用 requirejs 来定义您自己的模块并解决它们之间的依赖关系,这就是重点。

唯一的问题是,你有没有要解决的问题?

于 2012-12-09T21:18:57.683 回答
1

正如@mpm 所写,Ember.js + RequireJS 或其他非 AMD 框架 + RequireJS 没有什么特别之处。

好的起点是 RequireJS 文档和 Ember.js + RequireJS TodoMVC 项目示例:

于 2013-03-19T13:15:10.253 回答