Kendo UI网格同步错误

时间:2015-10-21 14:13:50

标签: kendo-ui kendo-grid

我使用razor Html Helper创建一个Kendo UI Grid。创建网格,以便通过弹出窗口表单完成记录的编辑。这是代码

@(Html.Kendo().Grid<MyObject>()
              .Name("grid")
              .Editable(edit => edit
                  .Enabled(true)
                  .Mode(GridEditMode.PopUp)
              )
              .Columns(columns =>
              {
                  // Column declaration
              })
              .ToolBar(toolbar =>
              {
                  toolbar.Create());
              })
              .DataSource(dataSource => dataSource
                  .Ajax()
                  .Model(model => model.Id(m => m.Id))
                  .ServerOperation(false)
                  .Events(e =>
                  {
                      e.Error("error_handler");
                      e.Sync("sync_handler");
                  })
                  .Read("Read", "MyController")
                  .Create(c => c.Action("Create", "MyController"))
                  .Update(u => u.Action("Edit", "MyController"))
              )
        )

我在数据源的错误和同步事件上设置了一个处理程序。同步处理程序强制从服务器读取,因为必须在创建和更新操作时刷新某些数据。如果在创建或更新时发生错误,则错误处理程序应该阻止刷新网格。这是我的两个处理程序

 function error_handler(e) {
        if (e.errors) {

            $('#grid').data("kendoGrid").one("dataBinding", function (ss) {
                ss.preventDefault(); // cancel grid rebind if error occurs
            });    
        }
    }

    function sync_handler(e) {
        e.sender.read();
    }

我的问题是,即使我在同步操作上调用ss.preventDefault,我的同步处理程序仍会被调用,而对e.sender.read()的调用会导致我的弹出窗口窗体关闭。如果我删除我的同步处理程序,ss.preventDefault调用阻止我的弹出窗口窗体正确关闭,所以问题实际上是关于始终调用的同步处理程序,即使出错也是如此。知道怎么处理这个吗?

我最终做到了这一点,不是最好的,但至少解决了mt问题

function error_handler(e) {
    if (e.errors) {

        e.sender.preventSync = true;

        $('#grid').data("kendoGrid").one("dataBinding", function (ss) {
            ss.preventDefault(); // cancel grid rebind if error occurs
            // do some stuff here
        });

    }
}

function sync_handler(e) {

    if (!e.sender.preventSync)
        e.sender.read();

    e.sender.preventSync = false;
}

0 个答案:

没有答案