【问题标题】:Add promises to a loop for my Kendo grid为我的剑道网格添加承诺到循环
【发布时间】:2014-10-15 22:18:22
【问题描述】:

我有一个剑道网格,每行的第一列都有一个复选框。在用户选择他们的复选框/行并点击提交后,我需要为每个选定的行发布一个帖子,然后在全部完成后进行回调。这是我目前得到的,显然不起作用:

var myGrid = $("#myGrid").data("kendoGrid");

myGrid.tbody.find(">tr").each(function () {
    var dataItem = myGrid.dataItem(this);

    //if the current row is selected, then post it for processing
    if (this.cells[0].firstChild.checked) {
        $.post("/Controller/Action/" + dataItem.itemId, function (returnJson) {
            if (returnJson.succeeded) {
                //append success msg to message div
            }
            else {
                //append error msg to message div
            }
        });
    }
}).promise().done(function () {
    //notify the user once all have completed
});

我更喜欢通过 jQuery 实现 Promise,因为我们在项目中使用了很多 jQuery,但我也对其他解决方案持开放态度。

谢谢。

【问题讨论】:

    标签: javascript jquery foreach kendo-grid promise


    【解决方案1】:

    你很幸运 $.post 已经返回了一个 jqXHR 对象,它是一个承诺。

    我们会将所有的 Promise 推送到一个数组中,然后告诉 jQuery 显式地等待它们:

    var promises = [];
    myGrid.tbody.find(">tr").each(function () {
        var dataItem = myGrid.dataItem(this);
    
        //if the current row is selected, then post it for processing
        if (this.cells[0].firstChild.checked) {
            var p = $.post("/Controller/Action/" + dataItem.itemId, function (returnJson) {
                if (returnJson.succeeded) {
                    //append success msg to message div
                }
                else {
                    //append error msg to message div
                }
            });
            promises.push(p); // add the $.post call
        }
    })
    
    // then to notify, $.when waits for several promises
    $.when.apply(null, promises).then(function(results){
          // all ready!
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-20
      • 2013-06-27
      • 2023-03-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多