2011-04-07 41 views
0

我們最近將一個項目從Dojo 1.5升級到1.6 [用於基本IE9支持]及其中一個小部件。我們有一個對話框小部件[dijit.Dialog]與其中的另一個小部件[這裏的任何小部件將產生相同的行爲],預期的行爲是將內部小部件放置在對話小部件的contentNode中,並且它們的每個附着點是通過主小部件可用。Dojo 1.6對話框小部件丟失內容附件點

這不會發生,而是我們只能找到對話框的附着點。下面詳細信息:

我們正在做我們的主窗口部件的模板是這樣的:

<div dojoType="dijit.Dialog" dojoAttachPoint="dia_widget" 
    autofocus="true" draggable="false" open="false" preventCache="true"> 
    <div dojoType="dijit.form.ValidationTextBox" doLayout="false" dojoAttachPoint="val_widget"> 

    </div> 
</div> 

這爲我們提供了一個親代部件[main_widget]有兩個連接點:dia_widget和val_widget,這可能是訪問通過分別調用this.dia_widgetthis.val_widget在[在buildRendering()函數之後]的主窗口小部件中。

升級到1.6.0後出現錯誤。

我的猜測是,當一個對話框小部件被解析時,它將其內容的domNode刪除到它的新容器節點中。當根節點正在分配連接點時,由於domNode不再可用,它不會被添加。

我一直在調試,從我能看到buildRendering()調用_attachTemplateNodes()在dijit/_Templated.js。這會遍歷小部件中的節點,尋找它們的dojoattachpoint屬性並將它們推入小部件的_attachpoints屬性中。

第一個循環有兩個節點[我們的dia_widget和val_widget]節點。此時,它開始分別解析每個節點,首先在dia_widget上調用buildRendering()並找到所有子節點的附着點。

在某處,main_widget的dom被修改爲包含解析/呈現的dia_widget。循環然後返回到主節點_attachTemplateNodes()調用,其中它只看到dia_widget作爲子節點,失去了val_widget條目。由於未找到該節點,因此它永遠不會作爲main_widget中的附加點添加,因此我們無法在該行中對其進行訪問。

我希望這不會太複雜,我是Dojo的新手,追逐螢火蟲代碼並不是世界上最有趣的經驗,所以我寫了一些東西,因爲它們有意義對我來說。

我還想知道爲什麼行爲從1.5到1.6變化,這只是一個功能/參數,我應該傳遞到對話框以像以前一樣行事?這是我創建嵌套小部件的方式中的一個錯誤嗎?這是Dojo本身[已知]錯誤嗎?

謝謝,
VIC

+0

用#dojo中的wuhi提供一些幫助調查了一下:這隻發生在小部件使用'dojox.dtl._Templated'的情況下,它可以與'dijit._Templated'一起使用。 – xqwzts 2011-04-07 11:10:33

+1

[在Trac上打開了一個錯誤](http://bugs.dojotoolkit.org/ticket/12618) – xqwzts 2011-04-07 11:24:02

回答

0

有在1.6.0一些變化潛在地增加了一個「lang」屬性來動態加載的內容。有時候這個「lang」屬性值是不確定的,會導致問題。

看看你是否有一個「lang」屬性的問題 - 如果是的話,這可能會消除1.6.1。