0

我有一组 ComboBoxes,其项目来自同一个 DataSource.Read 事件。在某些情况下,我想过滤项目。我的组合框看起来像这样:

@(Html.Kendo().ComboBox()
    .HtmlAttributes(new { style = "font-size:10px; background-color: #f4f4f4;" })
    .Name(string.Format( "{0}{1}", p, f[0] ) )
    .Placeholder("Choose a value...")
    .DataTextField("Name")
    .DataValueField("Value")
    .DataSource( source => 
    {
        source.Read( read => read.Action( "MyMethod", "MyController", new { _type = f[2] } ) )
            .Events( e => e.RequestEnd( f[0] == "F1" && p != "P1" ? "SetFilter" : "NoFilter" ) );
    } )
)

变量 p 和 f[x] 是来自我正在运行的几个 foreach 循环的字符串。当我遍历这些循环时,我的意图是不理会 DataSource,除非 f[0] == "F1" 和 p != "P1" 的情况。

我的两个函数如下所示:

function NoFilter() { }

function SetFilter( e ) {
    var $filter = new Array();
    $filter.push({ field: "Name", operator: "startswith", value: "O" });
    e.sender.filter({ logic: "or", filters: $filter });
}

总共,我有十二个组合框要加载,其中两个适合我的例外。当编辑器出现时,所有组合框在加载时都会短暂显示等待指示器。这一切都很好,除了我的两个异常的等待指示器永远不会消失,即使过滤器是按我的意愿应用的。

我错过了什么让等待指示器运行?

4

1 回答 1

0

似乎您在递归调用服务器,因为您在读取数据后设置了过滤器。为数据源设置过滤器将再次调用带有过滤器的读取方法。这意味着它将 RequestEnd再次调用该方法(永无止境)。

而是以这种方式尝试在创建网格后设置过滤器。

于 2013-10-09T02:52:23.983 回答