2015-07-10 51 views
2

我正在使用RP Niemeyer的Kendo-Knockout綁定,我可以使事情正常工作。我目前遇到的問題是嘗試使用Kendo菜單過濾自定義過濾可觀察列。Knockout-Kendo JS如何使用Kendo過濾屬性過濾綁定到ko observable數組的列

Kendo可過濾屬性適用於不可觀察的列('顏色'),但我無法使其適用於可觀察列('水果')。

例如,當我點擊過濾器圖標要過濾的「蘋果」的的console.log果列顯示該錯誤:

Uncaught TypeError: (d.fruit || "").toLowerCase is not a function 

代替結合到可觀察陣列(self.items() )我可以使用以下方法:

self.items.asJS = ko.computed(function() { 
return ko.toJS(self.items()); 

},self);

但是,這裏的問題是數據將斷開連接到self.items()可觀察數組,破壞MVVM的目的。所以這不是我所追求的解決方案。或者,現在Knockout和Kendo UI之間沒有'可以做'。

這裏的HTML:

<div style="width:400px; height:150px; font-size:14px" data-bind="kendoGrid: 

    {data: items, 
    rowTemplate: 'itemsTmpl', useKOTemplates: true, 
    filterable: { extra: false}, 
    columns: [ 
    {field: 'id', title: 'ID', type: 'number', width: '30px'}, 
    {field: 'color', title: 'Color', type: 'string', width:'120px'}, 
    {field: 'fruit' , title: 'Fruit', type: 'string', width:'95%'} 
    ] 
    }"> 

</div> 

這是KO視圖模型代碼:

<script id="itemsTmpl" type="text/html"> 

    <tr style="height:5px" data-bind="focus: $root.selectRow "> 
     <td data-bind="text: id"></td> 
     <td> 
      <span style="width:95%" data-bind="text:color"></span> 
     </td> 
     <td> 
      <span style="width:95%" data-bind="text: fruit"></span> 
     </td> 
    </tr> 
</script> 

<script type="text/javascript"> 

    var item = function (id, color, fruit) { 
     var self = this; 
     self.id = id; 
     self.color = color; 
     self.fruit = ko.observable(fruit); 
    } 

    var ViewModel = function() { 

     var self = this; 

     self.items = ko.observableArray([ 
     new item(1, 'black', 'apple'), 
     new item(2, 'green', 'orange'), 
     new item(3, 'yellow', 'banana') 
     ]); 

    }; 

    ko.applyBindings(new ViewModel()); 

</script> 

回答

2

我用Knockout ES5解決了這個問題。 然後,分配我的數據到我的模型時,我用敲除映射與一個映射 對象是這樣的:

 var dataMapper = { 
      create: function(o) { 
       return ko.track(o.data), o.data; 
      } 
     }; 
     ko.mapping.fromJS(json, dataMapper, self.data); 

這使得過濾和排序工作出淘汰賽劍道網格的框的。