Kendo ui 更改数据源时Kendo ui组合框中未定义的值

Kendo ui 更改数据源时Kendo ui组合框中未定义的值,kendo-ui,Kendo Ui,当我们更改剑道ui组合框的数据源时,下拉列表中的所有值都显示未定义的值。我们正在为multi-select做同样的事情,它工作得很好。我们是否缺少了一些东西,或者只是控制中的一个bug。我们尝试了几个版本,它们都显示出相同的问题。我们的数据源结构可能会更改,因此必须更改显示文本和数据值 //Sample code we are doing when we change the data source. var combo = $("#fabric").data("kendoComboBox");

当我们更改剑道ui组合框的数据源时,下拉列表中的所有值都显示未定义的值。我们正在为multi-select做同样的事情,它工作得很好。我们是否缺少了一些东西,或者只是控制中的一个bug。我们尝试了几个版本,它们都显示出相同的问题。我们的数据源结构可能会更改,因此必须更改显示文本和数据值

//Sample code we are doing when we change the data source.
var combo = $("#fabric").data("kendoComboBox");
combo.setDataSource([
  { text2: "test1", value2: "1" },
  { text2: "test2", value2: "2" }
]);
combo.setOptions({dataTextField: "text2",dataValueField: "value2"});
combo.refresh();

  • 单击“更改数据源”按钮,查看第一个组合中的值
  • 下拉列表显示未定义的值,但当我们在列表中选择一个时,它会正确显示

因此,首先
setOptions
文档告诉我们,此方法的实现因每个小部件而异:

所以基本上setOptions只支持对小部件配置的一些基本更改(如数字输入的“min”、“max”),并且每个小部件的设置都会有所不同。不幸的是,无法判断小部件的哪些属性可以修改,哪些不可以修改

在主要情况下,如更改小部件的数据源(或更改网格小部件的列等),我建议重新创建整个小部件。这是唯一可靠的方法,因为在幕后可能会发生很多我们不知道的魔法

您需要取消选择该项,以清除输入中的值。然后销毁小部件,并使用新配置再次挂钩到输入

$("#get").click(function() {

    var combo = $("#fabric").data("kendoComboBox");
    combo.select(-1);
    combo.destroy();

    $("#fabric").kendoComboBox({
        dataTextField: "text2",
        dataValueField: "value2",
        dataSource: [
          { text2: "test1", value2: "1" },
          { text2: "test2", value2: "2" }
        ]
    });

});

因此,首先
setOptions
文档告诉我们,此方法的实现因每个小部件而异:

所以基本上setOptions只支持对小部件配置的一些基本更改(如数字输入的“min”、“max”),并且每个小部件的设置都会有所不同。不幸的是,无法判断小部件的哪些属性可以修改,哪些不可以修改

在主要情况下,如更改小部件的数据源(或更改网格小部件的列等),我建议重新创建整个小部件。这是唯一可靠的方法,因为在幕后可能会发生很多我们不知道的魔法

您需要取消选择该项,以清除输入中的值。然后销毁小部件,并使用新配置再次挂钩到输入

$("#get").click(function() {

    var combo = $("#fabric").data("kendoComboBox");
    combo.select(-1);
    combo.destroy();

    $("#fabric").kendoComboBox({
        dataTextField: "text2",
        dataValueField: "value2",
        dataSource: [
          { text2: "test1", value2: "1" },
          { text2: "test2", value2: "2" }
        ]
    });

});

我尽量不破坏和重建,因为我们使用的是aurelia kendo UI桥,在这种情况下,破坏根本不起作用。我们最终对kendo ui bridge元素的引用调用了recreate()。在控制器中,我们更改kDataTextField、kDataValueField和kDataSource,然后对控件引用调用recreate()。工作就像一个符咒。我尽量不破坏和重建,因为我们正在使用aurelia kendo UI bridge,在这种情况下破坏根本不起作用。我们最终对kendo ui bridge元素的引用调用了recreate()。在控制器中,我们更改kDataTextField、kDataValueField和kDataSource,然后对控件引用调用recreate()。工作起来很有魅力。