剑道网格,淘汰vm和行模板



我有一个绑定到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"应用于表行。

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

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

感谢

如果你只想更改替换行的样式,你可以在这里看到示例: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绑定(在我的示例中)来区分替换行

我能够通过使用"JQuery-eeven"选择器来实现这一点。我将代码添加到网格定义的数据绑定属性中。这是它的样子。

JAVASCRIPT

    var myGridDefinition = {
        columns: {...}
        dataBound: {
            $("#myGridId .k-grid-content tr:even").addClass("k-alt");           
        }       
    }

HTML

    <div id="myGridId" data-bind="kendoGrid: myGridDefinition"></div>

还可以在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功能,但它抛出了错误,不知道为什么。但这个解决方案效果很好。

相关内容

  • 没有找到相关文章

最新更新