2011-01-06 49 views
1

所以我一直在使用Javascript提供一個項目,它接受用戶提供的對象並用HTML表示它們。現在它們在內存中被表示爲一個數組,並且在顯示器中被表示爲一個單獨的數組。在整合了一些代碼更改之後,問題出現在顯示陣列似乎有刪除內容的麻煩,因此應該刪除的內容不會從視圖中消失。Javascript和HTML數據模型和演示文稿模型設計問題

聲明列表:

this.divList = gDocument.getElementById(element); 
this.objectList = []; 

將對象添加到列表中:

addObject = function (address, type){ 
    var newDiv = gDocument.createElement("div"); 
    this.divList.appendChild(newDiv); 

    var d = this.createObject(newDiv, address, type); 

    if (undefined != d) 
    { 
     this.objectList.push(d); 
    } 
} 

的divList準確地反映了鏈表類直到任何更改都在運行時的鏈表類製成。重新啓動時,列表再次同步。當我試圖修復它時,事情非常複雜。我想知道是否有更好的方法來設計這樣的想法(對象模型和圖形表示)。任何意見將是有益的,謝謝。

+1

這是一個有點模糊......你需要提供的具體例子'一個divList的外觀like','什麼的鏈表類看起來like'和'你如何使您的最好的結果divList'。 – 2011-01-06 14:59:55

+0

理論上,divList和objectList最終可能會以不同的設計消失。我更關注的是Javascript對象模型和HTML中圖形表示的設計建議。保持我使用完整的所有東西感覺就像它會打敗擁有新設計的目的,因爲我覺得它不會讓任何事情變得更簡單。 – user535617 2011-01-06 15:11:17

回答

0

拋開問題模糊不清,我的建議是在內存中存儲一​​個列表,而不是兩個。每個列表元素都是一個對象,其中包含您需要的所有必要數據,用於特定摘要「對象」(「用戶提供的」)。事情是這樣的:

this.divList = gDocument.getElementById(element); 
this.masterList = []; 
var i, 
    len = this.divList.length; 
for (i = 0; i<len; i++) 
{ 
    this.masterList.push({ 
     elt: this.divList[i], 
     obj: /* however you'd create the object in this.objectList */ 
    }); 
} 

編輯:你addObject功能將改爲這樣的事:

addObject = function (address, type) 
{ 
    var newDiv = gDocument.createElement("div"), 
     newObj = {elt: newDiv, 
        obj: this.createObject(newDiv, address, type)}; 
    this.masterList.push(newObj); 
    this.divList.appendChild(newDiv); 
} 

,可以儲存到你appendChild()的HTML元素的引用成爲。你已經這樣做了 - 但是當你需要處理的各個元素(比如刪除一個),使用masterList代替:

removeObject = function (i) 
{ 
    var toRemove = this.masterList.splice(i, 1); 
    if (toRemove) 
    { 
     this.divList.removeChild(toRemove.elt); 
    } 
} 

Array.splice()見。

+0

因此,我認爲它應該代表元素?所以如果我理解正確的話,我用一個元素(HTML表示)和對象來推送一個對象。但是,如果我只應該存儲一個列表,那麼爲什麼divList仍然存在? – user535617 2011-01-06 15:23:16

+0

@user:是的,這就是我的意思。 'divList'在那裏,因爲我認爲你需要從HTML中讀取元素(我之前沒有看到你的問題編輯)。根據你的編輯,'divList'不是必需的。 – 2011-01-06 15:38:52

+0

@user:看我的編輯。 – 2011-01-06 15:54:24