【问题标题】:Updating kendo dataSource via transport通过传输更新剑道数据源
【发布时间】:2013-11-18 19:38:40
【问题描述】:

我正在尝试根据从另一个下拉列表中选择的值 (cboSearchString1DDL.element[0].value) 设置远程数据 url。我继续学习剑道网络控制,所以我不确定如何最有效地完成这项任务。我尝试了几种方法,但在读取数据源时仍然出现错误。我正在尝试将其设置为关闭 DDL1。这就是我所在的位置,我知道这不是正确的方法:

// search string 1 DDL
var cboSearchString1DDL = $("#cboSearchString1DDL").kendoDropDownList({
    autoBind: false,
    optionLabel: " "
}).data("kendoDropDownList");

// search string 2 DDL
var cboSearchString2DDL = $("#cboSearchString2DDL").kendoDropDownList({
    autoBind: false,
    optionLabel: " "    
}).data("kendoDropDownList");

// 1st DDL dataSource                   
var dataSourceTowns = new kendo.data.DataSource({                   
    transport: {       
       read: {
           url: _urlTowns,
           dataType: "json",
        }
    },
    schema: {
        data: "Towns"
    }
});

$("#cboSearchString1DDL").data("kendoDropDownList").wrapper.show();

// 1st DDL                               
var townsDDL = $("#cboSearchString1DDL").kendoDropDownList({
    autoBind: false,
    dataTextField: "Column1",
    dataValueField: "Column1",
    dataSource: dataSourceTowns,
    close: function () {
        alert(cboSearchString1DDL.element[0].value);
        streetsDDL.enable(true);
        streetsDDL.setDataSource(dataSourcestreetsDDL);
        streetsDDL.refresh();
    }
}).data("kendoDropDownList");

// show 2nd DDL 
$("#cboSearchString2DDL").data("kendoDropDownList").wrapper.show();
cboSearchString2DDL.enable(false);

// 2nd DDL datasource 
var dataSourcestreetsDDL = new kendo.data.DataSource({
    transport: {
        read: {
            url: _urlSOESearchAddress + "townName=" + cboSearchString1DDL.element[0].value + "&f=",
        dataType: "json",
        },
    },
    schema: {
        data: "StreetsinTown"
    }
});

// 2nd DDL
var streetsDDL = $("#cboSearchString2DDL").kendoDropDownList({
    autoBind: false,
    dataTextField: "Street",
    dataValueField: "Street",
    requestStart: function (e) {
        console.log("request started");
    },
    requestEnd: function (e) {
        var response = e.response;
        var type = e.type;
        console.log(type);
        console.log(response.length);
    }
}).data("kendoDropDownList");

提前致谢!

【问题讨论】:

  • cboSearchString1DDL.element[0].value 在远程服务调用发生时显然为空。谢谢。
  • 好吧,您发布的代码中肯定没有定义。所以定义它或发布更多你的代码。
  • 很抱歉,我已经更新了我的代码,并考虑到了简洁性。
  • cboSearchString1DDL 仍未在任何地方定义。您是否将 jquery 选择器与变量名混在一起?
  • 我猜你应该这样做:$('#cboSearchString1DDL').val() 而不是cboSearchString1DDL.element[0].value

标签: javascript kendo-ui kendo-combobox kendo-dropdown


【解决方案1】:

请记住,url 可以是一个将 URL 作为字符串返回的函数。因此,如果更容易编码,您还可以执行以下操作:

var dataSourcestreetsDDL = new kendo.data.DataSource({
    transport: {
        read: {
            url: function () {
                var searchAddress = ...;
                var searchString = ...;
                return searchAddress + "townName=" + searchString + "&f=";
            }
        ...

只要数据源需要读取数据,就会调用该函数。这可能比关闭下拉菜单时更改内容更容易。

【讨论】:

  • 太棒了,谢谢。为您准备的虚拟啤酒!效果很好。
【解决方案2】:
$("#cboSearchString1DDL").kendoDropDownList({

被调用两次。第二次调用它可能会清除此处设置的 var:

var cboSearchString1DDL = $("#cboSearchString1DDL").kendoDropDownList({

如果你要在一个元素上多次初始化一个组件,通常使用 kendo,你需要执行一个 .destroy() 来干净地完成它。我什至不确定这是你想要做的。

【讨论】:

  • 我正在重用元素,你是对的。我有一个大的 case 语句,我使用 .hide() 和 .show() 来换出 AutoComplete 或 DropDownList 控件。我将研究 .destroy() 以及何时调用它。文档非常简短。
  • 另一件事......我有一个动态列表,我想在我的剑道网格中的剑道下拉菜单中使用。似乎下拉菜单仅在单击时自行构建。我在过滤器下拉区域中使用它。我最终不得不检测mousedown,构建列表,并在剑道下拉列表中回调我的动态列表的结果。可能有帮助,也可能没有帮助。很难说,因为剑道有很多可能性。
  • 哎呀,我知道了。我总是通过这些控件学习新的东西。像我上面的问题有点令人沮丧,特别是当我可以捕获向我显示值的控件时,但会中断。我正在调查.destroy()。在这一点上听起来很有趣;)
猜你喜欢
  • 2016-08-18
  • 1970-01-01
  • 1970-01-01
  • 2013-08-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多