我使用 Javascript 编程已有一段时间了。最近我做了一个相当大的 jQuery 项目并应用了这篇精彩文章中描述的模块模式:http://www.adequatelygood.com/2010/3/JavaScript-Module-Pattern-In-Depth
这一切都进行得很顺利,代码看起来很流畅且易于管理,但我觉得它还可以做得更好。我花了一天时间寻找一些 Javascript 框架,主要是那些:
- 有 UI 绑定(bind)支持
- 有一个模板系统
- 可以使用 jQuery
- 帮助我按照与模块模式类似的方式组织代码
我偶然发现了 AngularJS、KnockOutJS、SpineJS、JavascriptMVC 等框架。EmberJS 是真正脱颖而出并广受赞誉的框架。
我决定试一试,但这并不容易。 EmberJS 教程的可用性非常有限。尝试了很长时间后,我设法让一些东西运行起来,我喜欢 EmberJS 的功能!只有一件事我似乎无法弄清楚 - 这也是我的问题:How can I extend an Ember namespace (made with Ember.Application.create)?
澄清一下:我的项目的旧版本有一个 Core-namespace 和一个 Util-namespace。两者都包含所有其他类都可以使用的各自功能。我怎样才能在初始命名空间之上拥有一个带有函数的核心和实用程序命名空间?
我只是做:
MyNamespace = Ember.Application.create();
MyNamespace.Core = Ember.Application.create();
MyNamespace.Util = Ember.Application.create();
还是别的?
最佳答案
您不能嵌套 Ember.Namespace
(其中 Ember.Application
是 Ember.Namespace
的子类),请参阅问题#683 .
核心贡献者之一 Tome Dale 添加了一个关于复杂应用程序布局的有趣答案,请参阅 comment .
因此您可以只使用 App = Ember.Application.create()
并在此命名空间下创建您的 Controller 、 View 等。或者你可以 - 如果你打算在其他项目/应用程序中重用一些代码 - 像这样拆分命名空间:
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.Application
扩展了 Ember.Namespace
,并添加了有关处理事件(点击,...)的功能。当您编写带有 View 的应用程序时,这些东西很有用 - 在您的 Core
和 Util
命名空间中,您不需要这些东西,这就是为什么这 只是 一个 Ember.Namespace
。
关于javascript - 如何使用 EmberJS 扩展命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10271546/