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>