2015-07-01 63 views
3

我注意到不久之前,我能夠在JavaScript中做到這一點。我可以創建一個按鈕div,並像這樣附加一個數組,對象或值。在數組中存儲數組或對象是否是一種好習慣?

var newDiv = document.createElement("div"); 
newDiv.id = dName 
newDiv.value = value; 

後來,當點擊div時,我就能夠對這個數據呼叫,像這樣:

function clickFunction(e){ 
    console.log(e.path[0].value, "clicked"); 
    var itemArray = e.path[0].value; 
    console.log(itemArray.inputRequest.length, "dataReqs needed"); 
} 

我想知道這是否是好的。我不知道該數據的位置是否總是爲.path [0]。 任何人都可以確認這是否是一種好的做法?我正在開發一個需要大量自動化Div的UI,所以我試圖儘可能保持一切儘可能自動化和簡單。 請圖書館回答。

+3

我會強烈建議不要這麼做。相反,我建議在JavaScript中創建數據結構,並將您的dom元素存儲在您的javascript數據結構中。 – bhspencer

+0

你的數據結構有多複雜?如果他們是簡單的數字和/或字符串,自定義的'data-'屬性就可以完成這項工作。 –

+1

您不能在對象中存儲對象(包括數組)。當你將element屬性設置爲某個值時,後者被視爲'string'(參考:[1](http://www.w3.org/TR/REC-DOM-Level-1/level-one-core .html#method-setAttribute),[2](http://www.w3.org/TR/DOM-Level-2-Core/core.html#ID-F68F082))。所以當你傳遞object時,它會通過調用'toString'方法強制轉換爲'string'。 – hindmost

回答

1

一切都是一個意見,但你會發現很多「無對這個答案。爲什麼?

的基本模式是MV *。我強烈建議閱讀基本JavaScript設計模式的這個 chapter

最後,它取決於你想在那裏存儲多少數據。如果它變得複雜,請將其移至模型或控制器。有這個選項(read here more on HTML data-attribute)。

如果存儲不是一個簡單的數字或字符串更多,我不會推薦它。

理由反對:

  • 如果其他人也操縱你的代碼,它更容易遵循的設計模式使每個人都有你的代碼相同的理解。
  • 將數據存儲在模型中或控制器內部。優點是你不必點擊一個按鈕來訪問它們。
  • 如果將它們存儲在模型/控制器,你可以更容易地共享數據。
  • 您的所有數據都將在DOM中可見。當您查看呈現的HTML並嘗試查找錯誤時,它會變得非常難看。
  • 這樣測試數據非常困難。
+0

好的,我會在div.data中使用關鍵字或數字存儲方法;並從一個單獨的對象/數組訪問它,所以我不必循環找到正確的項目。希望我能給你兩個答案,非常感謝! – WouldBeNerd

1

有在被專門爲此目的引入的HTML5規範data-屬性。

https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/Using_data_attributes

所以,你可以重寫你的代碼,使它們的使用。

var newDiv = document.createElement("div"); 
newDiv.id = 'some name'; 
newDiv.dataset.value = 'some value'; 


function clickFunction(e){ 
    console.log(e.target.dataset.value); 
} 

document.body.appendChild(newDiv); 
newDiv.addEventListener('click', clickFunction); 

http://jsfiddle.net/5dvheb0k/

+0

這適用於'String'類型,但不適用於對象,除非每次要更改值時都要'JSON.parse/stringify'。 –

+0

@NoahFreitas當然,但如果從JSON轉換不方便,還可以將一個鍵名存儲在'data'屬性中,並將數據保存在該鍵下的全局對象中。 – pawel

相關問題