2015-10-19 84 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

這是醜陋的,我知道,但在這種情況下劍道是有限的,並沒有提供資源來處理自己的結果。如果有可用的東西,我不知道。恐怕,模板在你的情況下不起作用。