6

我已经用 Javascript 编程了一段时间。最近我做了一个相当大的 jQuery 项目并应用了这篇精彩文章中描述的模块模式:http: //www.adequatelygood.com/2010/3/JavaScript-Module-Pattern-In-Depth

这一切都很顺利,而且代码看起来很流畅且易于管理,但我觉得它可能会更好。我花了一天时间寻找一些 Javascript 框架,主要是那些:

  • 有 UI 绑定支持
  • 有一个模板系统
  • 可以使用 jQuery
  • 帮助我以与模块模式类似的方式组织我的代码

我偶然发现了 AngularJS、KnockOutJS、SpineJS、JavascriptMVC 等框架。真正突出并受到称赞的框架是 EmberJS。

我决定试一试,但这并不容易。EmberJS 教程的可用性非常有限。在尝试了很长时间之后,我设法让一些东西运行起来,我喜欢 EmberJS 所做的!只有一件事我似乎无法弄清楚 - 这也是我的问题:如何扩展 Ember 命名空间(使用 Ember.Application.create 制作)?

澄清一下:我的项目的旧版本有一个 Core-namespace 和一个 Util-namespace。两者都包含它们各自的所有其他类都可以使用的功能。如何在初始命名空间之上拥有具有函数的 Core- 和 Util-命名空间?

我只是这样做:

MyNamespace = Ember.Application.create();
MyNamespace.Core = Ember.Application.create();
MyNamespace.Util = Ember.Application.create();

或者是其他东西?

4

1 回答 1

10

您不能嵌套Ember.Namespace's(Ember.Application作为 的子类Ember.Namespace),请参阅问题#683

核心贡献者之一 Tome Dale 就复杂应用程序的布局添加了一个有趣的答案,请参阅评论

所以你可以App = Ember.Application.create()在这个命名空间下使用和创建你的控制器、视图等。或者您可以 - 如果您打算在其他项目/应用程序中重用某些代码 - 像这样拆分命名空间:

Util = Ember.Namespace.create({
    importantNames: 'Einstein'.w()
});

Core = Ember.Namespace.create({
    sqrt: function(x) { return Math.sqrt(x); }
});

App = Ember.Application.create();

...

App.myListController = Ember.Object.create({
    importantNamesBinding: 'Core.importantNames',
    sqrtBinding: 'Util.sqrt'
});

一个Ember.Applicationextends Ember.Namespace,并添加有关处理事件(单击,...)的功能。当你编写一个带有视图的应用程序时,这些东西很有用——在你的CoreUtil命名空间中你不需要这些东西,这就是为什么这只是一个Ember.Namespace.

于 2012-04-22T20:30:38.097 回答