我有一个foreach循环(使用MVC3的Razor引擎编写),我需要在每次迭代时在Popups数组中创建一个新对象。这是我正在尝试运行的内容:
var popups = [];
var count = 0;
@foreach (var marker in Model) {
<text>
popups[count]["content"] = document.createElement("div");
popups[count]["content"].class = "infobox-custom";
popups[count]["content"].style.cssText = "padding: 5px; width: 600px;";
popups[count]["content"].innerHTML = '<div class="professional"><h1>test</h1></div>';
popups[count]["infobox"] = new InfoBox();
popups[count]["marker"] = new MarkerInfo();
count++;
</text>
}
console.log(popups);
我收到了错误:
未捕获的TypeError:无法设置未定义的属性“内容”
如您所见,我正在尝试将每个标记的相关信息封装在javascript对象中。我的目标是使用popups[index].marker
或popups[index].content
之类的东西来访问我需要的所有内容。
我正在阅读Javascript:The Good Parts这本书,其中有一部分提及:
如果对象尚未具有该属性名称,则会扩充该对象:
我在这里缺少什么?
答案 0 :(得分:2)
在开始向对象添加属性之前,将popups[count]
设置为对象。
var popups = [];
var count = 0;
@foreach (var marker in Model) {
<text>
popups[count] = {};
popups[count]["content"] = document.createElement("div");
popups[count]["content"].class = "infobox-custom";
popups[count]["content"].style.cssText = "padding: 5px; width: 600px;";
popups[count]["content"].innerHTML = '<div class="professional"><h1>test</h1></div>';
popups[count]["infobox"] = new InfoBox();
popups[count]["marker"] = new MarkerInfo();
count++;
</text>
}
console.log(popups);
答案 1 :(得分:1)
您需要使popups
成为一组对象。
popups[count] = {}; // <<<<<<<<<<<<<<<<-----------------------------------
popups[count]["content"] = document.createElement("div");
popups[count]["content"].class = "infobox-custom";
popups[count]["content"].style.cssText = "padding: 5px; width: 600px;";
popups[count]["content"].innerHTML = '<div class="professional"><h1>test</h1></div>';