如何使用 EmberJS 扩展命名空间
How to extend namespaces with EmberJS
我已经用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 制作)?
澄清一下:我的项目的旧版本有一个核心命名空间和一个实用命名空间。两者都包含所有其他类都可以使用的各自函数。如何在初始命名空间之上拥有一个核心和实用功能命名空间?
我只是做:
MyNamespace = Ember.Application.create();
MyNamespace.Core = Ember.Application.create();
MyNamespace.Util = Ember.Application.create();
还是别的什么?
你不能嵌套Ember.Namespace
的(其中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.Application
扩展Ember.Namespace
,并添加有关处理事件的功能(单击,...)。当您编写带有视图的应用程序时,这些东西很有用 - 在您的Core
和Util
命名空间中,您不需要这些东西,这就是为什么这只是一个Ember.Namespace
。
- 在javascript中使用命名空间
- 为什么不推荐使用“with”?是否有更好或其他方法可以“下降”到对象的命名空间
- javascript中的命名空间,IDE中支持代码完成/内容辅助's
- 如何使用javascript命名空间
- js命名空间和变量范围
- html,js-如何限制元素"范围“-命名空间
- 转换自的JavaScript命名空间
- 命名空间与自调用函数
- 什么's当前命名空间/类中JavaScript子命名空间/类的语法
- 无法加载Ace.js编辑器模式和主题(命名空间项目&AMD require.js&grunt
- jQuery命名空间和使用“;这个“;
- 如何使用 EmberJS 扩展命名空间
- TypeScript在命名空间下扩展JQuery
- 从内部扩展命名空间模块
- Firefox引导扩展:命名空间
- Firefox扩展警告:JavaScript命名空间污染
- 如何在javascript的命名空间中扩展类
- 使用文字符号扩展命名空间中的对象
- 命名空间QScriptEngine扩展
- 如何允许最终用户为此模式定义多个命名空间扩展级别