尝试将字段添加到javascript对象

时间:2012-11-26 02:41:04

标签: javascript asp.net-mvc-3 object razor

我有一个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].markerpopups[index].content之类的东西来访问我需要的所有内容。

我正在阅读Javascript:The Good Parts这本书,其中有一部分提及:

  

如果对象尚未具有该属性名称,则会扩充该对象:

我在这里缺少什么?

2 个答案:

答案 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>';