如何延长与EmberJS命名空间(How to extend namespaces with Emb

2019-07-29 02:44发布

我在Javascript编写了一会。 最近我做了一个相当庞大的jQuery项目和这美妙的文章中描述的应用模块模式: http://www.adequatelygood.com/2010/3/JavaScript-Module-Pattern-In-Depth

这一切都很好,很正常,并且代码看起来光滑和管理的,但我觉得还可以更好。 我已经花一天时间寻找一些JavaScript框架,主要是那些:

  • 有UI绑定支持
  • 有一个模板系统
  • 可以用jQuery工作
  • 帮我安排我的代码以类似的方式,因为我与模块模式做

我经历了框架跌跌撞撞像AngularJS,KnockOutJS,SpineJS,JavascriptMVC,等等。一个真正贴出来 - 而且是相当的好评 - 是EmberJS。

我决定给它一个镜头,但它并不容易。 教程EmberJS的可用性是非常有限的。 在努力了很长一段时间后,我设法弄到一些东西跑,我喜欢EmberJS做什么! 只有一件事我似乎无法弄清楚-这也是我的问题: 如何延长灰烬命名空间(与Ember.Application.create制造)?

为了澄清:老版我的项目有一个核心的命名空间和一个实用程序的命名空间。 这两个包含所有其他类可以使用各自的功能。 怎样才可以有一个核心 - 和的Util-命名空间的初始命名空间的顶部功能?

难道我只是做:

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

或者是其他东西?

Answer 1:

你不能嵌套Ember.Namespace “s(其中Ember.Application是的子类Ember.Namespace ),见问题#683 。

圣多美戴尔的核心贡献者之一,增加了有关的复杂的应用布局一个有趣的回答,请参见注释 。

所以,你可以只使用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 ,并增加了有关处理事件(点击...)功能。 当你写一个享有申请这个东西是有用的-在你的CoreUtil命名空间,你就不需要的东西,这就是为什么这只是一个Ember.Namespace



文章来源: How to extend namespaces with EmberJS