2013-08-21 85 views
0

當一個小部件需要使用功能進行修飾(可能需要多個不同的小部件)時,我一直在朝着mixin方法邁進。例如,對於一個自定義的小部件庫,我可以看到一些mixin的存在: -L10n支持(例如,通過提供直接功能來覆蓋像f10Callback()),使得捕獲F10等特定鍵時變得很微不足道) - 自定義主題支持(如爲特定領域的情況添加某些CSS類,跨越很多不同的小部件)Dojo 1.9 mixin方法

我有點喜歡把一個mixin放在一個小部件上,這對我來說似乎只是簡單地添加函數以及正在執行mixin的小部件的小部件生命週期之後的屬性。

一些問題: - 我是否過度使用這個mixin的想法? - 如何防止mixin被多次應用到同一個小部件(例如,當你正在擴展的模塊已經有mixin時)? - mixin應該保持狀態嗎? - mixin的公開功能應該如何?通過提供他們的小部件需要覆蓋的函數?或者更多的酒吧/次級方法?

真的只是尋找與dojo mixins一般的意見。

回答

0

我認爲你對如何使用mixin是正確的:它們意味着對其他對象的行爲進行小型,便攜和特定的調整。

mixin冪等性沒有內置機制:您需要自行管理。我從來沒有遇到過這個領域的情況,因爲我傾向於在飛行中宣佈課程,並且在使用之前就發生混音。例如,如果我使用mixin進行主題化,我會在頂層「界面」(負責將所有小部件粘合在一起)而不是以每個可以爲主題的課程中做到這一點。

Mixins可以並且保持狀態。見例如dijit/form/_FormWidgetMixin.js

mixin的公開功能應該如何?那麼,我想說這取決於整體設計,而且沒有正確的方法。我的mixin通常只是透明地擴展了基類的API:這就是它們添加到類的行爲而不添加到API中。有些情況下,基類是一個抽象接口,並且需要mixin來實現行爲(大多數情況下,當我有策略或構建器模式實現時)。