我有一个绑定到ko vm的KendoUI网格
由于特定要求(某些列,链接等中的图标),我需要定义rowTemplate,我将其定义为ko模板。
但我也希望在不同的bg颜色中有正常和备用行。
因此我定义了两个相同的模板,如下所示
<script id="rowTmpl" type="text/html">
<tr role="row" >
<td align="center">
<a data-bind="attr: { href: 'scrccc_checkEdit.aspx?id=' + CheckID }" >
<img src="images/icon-edit.gif" border="0" alt="Edit/View Check" />
</a>
</td>
<td data-bind="text: CheckNumber"></td>
....
</tr>
</script>
<script id="altTmpl" type="text/html">
<tr class="k-alt" role="row">
<td align="center">
<a data-bind="attr: { href: 'scrccc_checkEdit.aspx?id=' + CheckID }" >
<img src="images/icon-edit.gif" border="0" alt="Edit/View Check" />
</a>
</td>
<td data-bind="text: CheckNumber"></td>
....
</tr>
</script>
基本上两个模板是相同的,除了alt模板将class class =“k-alt”应用于表格行。
但是这种方法非常糟糕,因为它复制了行模板的整个标记。
什么是实现我需要的更好方法?
谢谢
答案 0 :(得分:2)
如果您只想更改替代行的样式,可以在此处查看示例:http://jsfiddle.net/P5EQt/
HTML
<div data-bind="kendoGrid: { data: items, rowTemplate: 'rowTmpl', useKOTemplates: true }"> </div>
<button data-bind="click: addItem">Add Item</button>
<script id="rowTmpl" type="text/html">
<tr data-bind="css:{strong:id%2===0}">
<td data-bind="text: id"></td>
<td>
<input data-bind="value: name" />
</td>
<td>
<a href="#" data-bind="click: $root.removeItem">x</a>
</td>
</tr>
</script>
的Javascript
var ViewModel = function() {
this.items = ko.observableArray([
{ id: "1", name: ko.observable("apple")},
{ id: "2", name: ko.observable("orange")},
{ id: "3", name: ko.observable("banana")}
]);
this.addItem = function() {
var num = this.items().length + 1;
this.items.push({ id: num, name: "new" + num});
};
this.removeItem = function(item) {
this.items.remove(item);
}.bind(this);
};
ko.applyBindings(new ViewModel());
CSS
.strong { background-color:red; }
使用具有id(在我的样本中)条件的敲除css绑定来区分替代行
答案 1 :(得分:1)
我能够通过使用“JQuery even”选择器实现这一目标。我将代码添加到网格定义的数据绑定属性中。这就是它的样子。
JAVASCRIPT
var myGridDefinition = {
columns: {...}
dataBound: {
$("#myGridId .k-grid-content tr:even").addClass("k-alt");
}
}
HTML
<div id="myGridId" data-bind="kendoGrid: myGridDefinition"></div>
答案 2 :(得分:0)
还可以在VM上创建AltRow属性和IsAltRow()方法,并使用css数据绑定功能。
var vm = function () {
var self = this;
this.AltRow = true;
this.IsAltRow = function () {
self.AltRow = !self.AltRow;
return self.AltRow;
}
}
<script id="rowTmpl" type="text/html">
<tr data-bind="css: { 'k-alt': $root.IsAltRow() === true }">
<td>
...
</td>
</tr>
</script>
我也尝试使用KO的Computed Property功能,但它抛出了错误,不知道为什么。但是这个解决方案很好。