我目前有一个表,每次用户按下按钮(使用Backbone事件处理)时都会更新。
以下是每次按下按钮时触发的事件:
add: function(ev) {
if($(ev.target).data("card-id")) {
this.card_array.push($(ev.target).data("card-id"));
current_deck.push($(ev.target).data("card-id"));
updateCurrentDeckTable();
} else {
alert("Couldn't add the card. Please wait a few seconds before trying again.");
}
console.log(this.card_array);
console.log(current_deck);
}
updateCurrentDeckTable定义如下:
function updateCurrentDeckTable() {
console.log(current_deck);
var content = "";
$.each(current_deck, function(i, cardId) {
console.log("Index: "+i+" || Card ID: "+cardId);
var M_Card = Parse.Object.extend("Card");
var M_CardQuery = new Parse.Query(M_Card);
M_CardQuery.get(cardId, {
success: function(m_card) {
console.log("Got "+m_card.get("cardTitle"));
content += "<tr>";
content += "<td>"+m_card.get("objectiveNumber")+"</td>";
content += "<td>"+m_card.get("cardTitle")+"</td>";
if (m_card.get("cardAffiliation") == null) {
content += "<td>-</td>";
} else {
content += "<td>"+m_card.get("cardAffiliation")+"</td>";
}
content += "<td><a>Details</a></td>";
content += "</tr>";
console.log("Content: "+content);
$('#deck-table tbody').append(content);
},
error: function() {
alert("Error.");
}
});
});
}
现在,用户第一次按下按钮,一切正常。但是,在第二次按下时,表格中添加了多行。此外,content
变量似乎保持旧值。每次调用函数时,它不应该重置为""
吗?
有谁知道发生了什么?如果您需要更多信息,请询问。
答案 0 :(得分:1)
为什么要使用全局current_deck
变量传递数据?
每次您输入updateCurrentDeckTable
方法的add
分支时:
if($(ev.target).data("card-id")) {
this.card_array.push($(ev.target).data("card-id"));
current_deck.push($(ev.target).data("card-id"));
updateCurrentDeckTable();
}
您要向全局current_deck
添加另一个条目,然后updateCurrentDeckTable
遍历该数组:
$.each(current_deck, function(i, cardId) { ...
我没有看到任何清除current_deck
的东西,所以它会继续增长。这可以解释你所描述的奇怪行为。
解决方案是停止使用current_deck
的全局,只需将其作为参数传递并根据需要进行清理。