2012-08-07 61 views
1

我讀過這篇文章(Using dojo.behavior),並且想要在我的項目中使用behavior模塊作爲事件處理模塊。如何在dojo小部件上使用dojo /行爲?

但我有一個問題,對於DOM節點來說,它的工作很棒,但我怎麼能在Dojo小部件上使用它呢?

如果我使用道場/模塊上,我能做到這樣的:

var buttonNode = dijit.byId("myButton"); 
on(buttonNode, "onClick", buttonHandler); 

dijit.byId("myButton").onClick = buttonHandler; 

但是,如果我用行爲模塊,

behavior.add({ 
    "#myButton": { 
     onClick: buttonHandler 
    } 
}); 

它不起作用。 (當然,在完成頁面渲染後,我調用了behavior.apply()。) 下面的代碼也不起作用。

behavior.add({ 
    "[widgetid='myButton']": { 
     onClick: buttonHandler 
    } 
}); 

經過一番調查,我發現上面的代碼不工作的原因是因爲按鈕小部件由許多s和內部組成。如果我使用由data-dojo-id指定的id,它將指向一個,而不是我希望事件綁定的那個。

我發現了一個解決方案,它能夠走出這種情況,

behavior.add({ 
    "[widgetid='myButton'] input": { 
    onclick: buttonHandler 
    } 
} 

但CSS選擇器太複雜,這取決於部件是什麼類型。

是否有一個很好的解決方案,就像在DOM節點上應用dojo /行爲的小部件?

回答

0

它看起來像你真正在掛鉤widget對象上的事件,但behavior被設計爲訪問DOM。所以,我認爲你被困在你的解決方法中。

+0

是的。你所說的正是我面臨的問題。你有什麼好的解決方案? – Programus 2012-10-19 04:35:49