2015-07-01 96 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

相关问题