2013-02-19 14 views
3

我在想,如果這是一個暫時的事情('my.example.Widget'),現在AMD在現場,或者它是否存在?Dojo小部件聲明字符串 - 是暫時的事情嗎?

declare('my.example.Widget', [], { 

}); 

如果我有一個像上面定義的小部件,我該如何檢查小部件的類型?有沒有辦法與AMD合作?

+0

對不起,但我沒有得到問題。你能用另外的話來解釋嗎? – 2013-02-19 18:37:23

+0

你不應該再需要它了,儘管它是向後兼容的好習慣。你說如果你像'declare([],{})一樣聲明你的小部件''你的代碼無法識別你的小部件類型?你有沒有試過至少讓你的widget擴展_dijit/_WidgetBase_?另外,如果你打算包含字符串,v1.7 +中的新風格是「my/example/Widget」。如果你不這樣做,並嘗試用'data-dojo-type =「my.example.Widget」聲明性地使用它,你將會得到一個錯誤。現在我想到了,你怎麼試圖使用這個小部件,以便得到未經協調的TypeError? – Default 2013-02-19 19:05:15

+0

因爲我使用Dojo的.isInstanceOf()函數,所以我無法想象這將如何處理/而不是傳入類型而不是字符串? – Alex 2013-02-19 19:11:53

回答

1

的方法來檢查,如果你的Dijit的小部件從一個特定的Widget繼承或密新是使用isInstanceOf功能如下:

var Widget = declare([_WidgetBase], { 
    name: "Widget_Name", 
    id: "some_id" 
}); 
var widgetInstance = new Widget(); 
console.log(widgetInstance.isInstanceOf(Widget)); // True 
console.log(widgetInstance.isInstanceOf(_WidgetBase)); // True 
console.log(widgetInstance.isInstanceOf(_TemplatedMixin)); // False 

你可以用this jsfiddle看到它的行動。

+0

所以你必須在你檢查的類型被導入爲依賴的上下文中檢查它嗎? – Alex 2013-02-20 08:28:40

+0

不幸的是,是的。我可以想到一個自定義函數,您可以使用它來傳遞一個字符串,但它需要對「隱藏的」小部件屬性進行一些「髒」的反省。骯髒的,我的意思是,根據道場,這是一個不好的做法,因爲你必須訪問你的小部件類'元信息。 Dojo對此有這樣的說法:所有的元信息都是一個可以改變的主題,不應該在正常編碼過程中使用。如果你使用它,準備在代碼更新時更新你的代碼._ – Default 2013-02-20 19:50:45

+0

如果這對你有好處(由於Dojo庫的「後端」更改,它可能會因爲沒有太多警告而中斷),然後詢問另一個關於如何完成這種事情的StackOverflow問題(根據字符串檢查小部件是否是特定類型),我將很樂意爲您提供一些選擇。 – Default 2013-02-20 19:53:02