【问题标题】:How to extend namespaces with EmberJS如何使用 EmberJS 扩展命名空间
【发布时间】:2012-04-22 19:53:30
【问题描述】:

我用 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();

还是别的什么?

【问题讨论】:

    标签: javascript jquery model-view-controller ember.js


    【解决方案1】:

    您不能嵌套Ember.Namespace(其中Ember.Application 是Ember.Namespace 的子类),请参阅问题#683。

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

    所以您可以使用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。

    【讨论】:

    • 首先感谢您的快速回复,非常详细。其次,我并不介意非嵌套命名空间,我只是在寻找正确的函数调用来创建类似命名空间的对象,Ember.Namespace.Create 就是这样!如果有的话,我可以使用我的模块模式方法在 Ember 应用程序之上拥有命名空间(无论是否嵌套),但这很脏。
    • 试了之后,我发现嵌套命名空间确实有效。可能是因为大众的需求,它在最近的版本中发生了变化?
    猜你喜欢
    • 1970-01-01
    • 2011-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-18
    • 1970-01-01
    • 2011-03-11
    相关资源
    最近更新 更多