2010-02-23 28 views
0

我開發了一個自定義dijit模板小部件。我必須對containerNode的孩子做一些DOM操作。一切工作正常,除了當我有兩個小工具加載,並且containerNode的孩子的操縱似乎影響相同類型的所有小工具,而不僅僅是小工具的特定實例。處理多個dijit小部件實例的DOM

我想我已經把範圍縮小到這部分我的代碼,我「卸載」的「孩子們」我是執行以下功能:

popPage: function() { 
    if (this._pagesLoaded) { 
    var i = this._pagesLoaded - 1; 
    var y = this.containerNode.children[i]; 
    if (typeof y !== "undefined") { 
     this.containerNode.removeChild(y); 
    } 
    var page = this.pages.pop(); 
    page.unsetPage(); //Internal sub object cleanup 
    page.destroyRecursive(); 
    this.endPageLoaded--; 
    this._calcPagesLoaded(); //recalcs this._pagesLoaded 
    } 
}, 

當我似乎執行此,似乎該子項將從所有Widgets的DOM中移除。它只是沒有任何意義,並且手動檢查Firebug中的東西(例如dijit.byId("logScroller62").containerNode.children)表明瀏覽器認爲所有東西都是獨立的,並且我爲兩個不同的實例獲得了兩組不同的結果集。

回答

0

看來我有一個初始化/範圍界定問題。我將我的子對象保存在一個數組中。我已經通過執行以下操作初始化在我的道場對象原型的屬性定義的數組:

pages: [], 

但似乎這會導致一個範圍問題,因爲簡單的改變:

pages: null, 

然後添加到初始化該Widget等的postCreate功能:

this.pages = []; 

似乎已經解決了這一問題。不過,我不確定爲什麼這樣的事會引起一個範圍問題。

0

我真的不明白你的描述,但這個錯誤似乎是在這裏:

看來,孩子是從所有小工具

一個的DOMNode的DOM可以去掉」 t是多個DOM節點的子節點,小部件也不能一次成爲多個小部件的子節點。

+0

是的,據我所知,但似乎發生的是,我執行上述代碼從Widget實例A中刪除子DOM節點,但它從Widget的所有實例中刪除相同的子節點索引(例如B,C等)。 – Kitson 2010-02-27 11:36:40

+1

好吧,看不到你的代碼,但我猜測this.containerNode.children是一個數組,它在多個實例中共享,因爲你在某個東西的原型中聲明瞭它。 – 2010-03-02 16:30:48

+0

是的,這也是我的猜測......我將回顧代碼,但是我不直接聲明它,因爲'containerNode'由'dijit._Templated' HTML模板自動設置。不知怎的,我可能搞砸了,但我不這麼認爲。 – Kitson 2010-03-07 13:50:49

相關問題