2015-10-19 37 views
0

我想将KendoDropDownList合并到我的应用程序中,但是有一种情况我无法工作。现有应用程序将data-属性添加到ListItem类的下拉列表中(因此呈现为<option data-xyz="abc" />)。有一个合法的原因是这样做的:信息用于在客户端预先填充表单,但是我对kendoDropDownList的问题是它构建了自己的列表来表示列表项,但它没有“带来这些数据属性。有没有办法将选择的列表项目链接到原始项目,我可以在哪里获取数据属性?否则,它看起来并不像我可以使用控制。KendoDropDownList选项数据项

编辑:我正在使用数据属性来做初始化,连同kendo.init。下面是HTML:

<select .. data-role="dropdownlist" data-option-label="- Select -"> 
    <option data-x="y" value="..">..</option> 
    <option data-x="y" value="..">..</option> 
    . 
    . 
</select> 

Javascript来初始化是:

kendo.init('body'); 

我没有使用客户端MVVM结合,仅供参考。然而,Kendo使用LI元素构建UL元素,这些元素表示下拉列表,不使用OPTION元素,因此当它构建列表时,它不包含所有属性。

+0

你可以发布一些代码,展示你如何设置下拉菜单,以及何时试图获得选定的选项? – ezanker

+0

更新如上,使用kendo.init通过'data-'initializatoin加载主体。 –

+0

看起来像kendo实际上从原始OPTION元素中删除数据属性以及创建新元素。所以即使引用原始的OPTION也不起作用。你能用值来代替数据属性来进行全局查找吗? – ezanker

回答

0

剑道再现的元素,这就是为什么它的属性都将丢失。我建议它创建一个构件之前复制data-属性,然后重新设置属性后的包装功能:

$.fn.myDDL = function() { 
    var el = $(this); 
    var attrs = []; 

    el.find("option").each(function() { 
    attrs.push($(this).data()); 
    }); 

    el 
    .kendoDropDownList() 
    .find("option").each(function(i, e) { 
     var keys = Object.keys(attrs[i]); 

     for (var k = 0; k < keys.length; k++) { 
     $(e).data(keys[k], attrs[i][keys[k]]); 
     } 
    }); 

    // Test 
    var opt = $("#abc option:eq(0)").data(); 
    console.log(opt); 
}; 

$(function() 
{ 
    $("#abc").myDDL(); 
}); 

Demo

这是丑陋的,我知道,但在这种情况下剑道是有限的,并没有提供资源来处理自己的结果。如果有可用的东西,我不知道。恐怕,模板在你的情况下不起作用。