1

我有一个绑定到 ko vm 的 KendoUI 网格

由于特定要求(某些列中的图标、链接等),我需要定义 rowTemplate,我将其定义为 ko 模板。

但我也希望有不同背景颜色的正常行和交替行。

因此,我定义了两个相同的模板,如下所示

        <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" 应用于表格行。

但这种方法非常糟糕,因为它复制了行模板的整个标记。

什么是完成我需要的更好的方法?

谢谢

4

3 回答 3

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 绑定来区分替代行

于 2013-12-09T03:44:46.510 回答
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>
于 2014-01-07T19:54:13.910 回答
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 功能,但它抛出了错误,不知道为什么。但是这个解决方案效果很好。

于 2014-02-17T15:14:11.270 回答