为什么/何时需要在ember.js中重新打开类?

时间:2013-11-14 21:28:24

标签: ember.js

有时您在模型上使用App.Model.reopenClass()link),而Ember指南则会讨论App.Router.reopen()link)。来自Ember指南:

  

reopen用于添加共享的实例方法和属性   跨所有类的实例。它没有添加方法和   属于类的特定实例的属性,如在vanilla中   JavaScript(不使用原型)。

     

但是当你需要创建类方法或添加属性时   类本身你可以使用reopenClass。

这何时有必要/有利?是不是可以直接添加所有内容?

2 个答案:

答案 0 :(得分:3)

reopenClass类似于向原型添加方法,而不是在类的每个实例上添加方法。您可以将它们视为静态变量/方法,而不是实例变量/方法。

这是一项重大的性能提升,可能对您正在解决的问题更有意义。

答案 1 :(得分:1)

您要重新打开类的一个示例是,当您要向现有默认生成的类添加属性时。例如:许多ember应用程序实例不会扩展路由器类。他们只使用默认的路由器类。但是,如果要将某些属性添加到要在其他位置使用的路由器类,该怎么办?重新开放在那里非常有用。这是我能想到的一个用例。

此外,在路由器扩展的情况下,类很难,因为ember中的大多数代码只使用路由器类。即使你扩展,一些回调/闭包仍然会引用旧的路由器类。

相关问题