2013-11-14 44 views
7

有時您在型號(link)上使用App.Model.reopenClass(),而Ember指南會講述App.Router.reopen()link)。來自Ember指南:爲什麼/你什麼時候需要重新打開ember.js中的類?

reopen用於添加跨類的所有實例共享 的實例方法和屬性。它不會像在香草 JavaScript(不使用原型)中那樣向類的特定實例添加方法和屬性。

但是,當您需要創建類方法或向 類本身添加屬性時,您可以使用reopenClass。

什麼時候這是必要/有利的?事先不能添加所有東西嗎?

回答

3

reopenClass類似於向原型添加方法,而不是在類的每個實例上添加方法。你可以將它們想象成靜態變量/方法,而不是實例變量/方法。

這是一個主要的性能增益,並且可能對您正在解決的問題更有意義。

1

您將重新打開一個類的一個示例是,當您要將屬性添加到現有的默認生成的類時。例如:許多實例的應用程序不會擴展路由器類。他們只使用默認的路由器類。但是如果你想添加一些屬性到你想在其他地方使用的路由器類。重新打開在那裏非常有用。這是我能想到的一個用例。

另外,在路由器擴展類的情況下,由於大多數的ember中的代碼只是使用路由器類,所以很難實現。即使你擴展了,一些回調/關閉仍然會引用舊的路由器類。

相關問題