0

我目前有一个表,每次用户按下按钮时都会更新(使用 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变量似乎保留了它的旧值。""每次调用函数时不应该重置吗?

有谁知道发生了什么?如果您需要更多信息,请询问。

4

1 回答 1

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所以它会继续增长。这可以解释你所描述的奇怪行为。

解决方案是停止使用全局 for current_deck,只需将其作为参数传递并根据需要进行清理。

于 2013-08-13T18:22:47.207 回答