2013-05-09 129 views
0

我試圖從KendoDropDownList中獲取所選項目的數據參數,該KendDropDownList被用作我的網格的自定義過濾器編輯器。從kendoui下拉列表中提取選定的數據值

我:

function gradeSelector(element) 
{ 
    element.kendoDropDownList({ 
    dataSource: { 
     transport: { 
     read: { 
      type: "POST", 
      url: ROOT+'record/fetchGrade', 
      dataType: 'json', 
      data: { 
      mode: 'obj' 
      } 
     } 
     } 
    }, 
    optionLabel: "Select grade", 
    dataTextField: "text", 
    dataValueField: "id", 
    template: '#="<span class=\'filterTrigger\' data-value=\'"+id+"\'>"+text+"</span>" #', 
    select: function(e) 
    {// Dirty, is there a better way? 
     html = e.item[0].outerHTML; 
     html = html.substring(html.indexOf('data-value="')+12);  
     gradeId = html.substring(0, html.indexOf('"')); 

     clearSingleFilter('grade'); 
     activeFilter.push({ 
     field: 'grade', 
     operator: 'eq', 
     value: gradeId 
     }) 
     $('.k-animation-container').hide(); 
     filtersState = 1 ; 
     $('#customerGrid').data('kendoGrid').dataSource.filter(activeFilter); 
    } 
    }); 
} 

的方式,我得到gradeId看起來非常雜亂。什麼是檢索這個值的正確方法?

回答

0

考慮使用close事件,而不是select,然後你可以簡單地做:

close   : function (e) { 
    // Easily get gradeId 
    var gradeId = this.select(); 

    clearSingleFilter('grade'); 
    activeFilter.push({ 
     field : 'grade', 
     operator: 'eq', 
     value : gradeId 
    }) 
    $('.k-animation-container').hide(); 
    filtersState = 1; 
    $('#customerGrid').data('kendoGrid').dataSource.filter(activeFilter); 
} 

「問題」與select的是,它被觸發觸發元素之前,所以你不能(容易)獲得的價值但在實際選擇值後觸發close

編輯:如果id列表未被排序並且連續,則以前的實施將失敗。作爲一個通用的解決方案,你應該使用:

close   : function (e) { 
    // Get index in the list 
    var idx = this.select(); 
    // Get the item corresponding to that index 
    var item = this.dataItem(idx); 
    // Now, we can get the id from the item 
    var gradeId = item.id; 
    console.log("gradeId", gradeId); 

    clearSingleFilter('grade'); 
    activeFilter.push({ 
     field : 'grade', 
     operator: 'eq', 
     value : gradeId 
    }) 
    $('.k-animation-container').hide(); 
    filtersState = 1; 
    $('#customerGrid').data('kendoGrid').dataSource.filter(activeFilter); 
} 
+0

謝謝!但我注意到,現在我需要抵消價值,因爲選擇總是比您選擇的要高。例如。在你的回答中,我現在必須做gradeId + 1來獲得預定的物品,爲什麼? – imperium2335 2013-05-09 13:04:34

+1

@ imperium2335實際上問題是更糟的是添加1.問題是,我的解決方案是返回列表中的索引,但如果列表未被排序和連續,它不起作用:-(檢查**編輯**爲固定解。 – OnaBai 2013-05-09 15:17:16

相關問題