Kendo 模板内的 Javascript 给出了错误的结果

标签 javascript jquery kendo-ui

我有一个包含 javascript 的模板

    # if(IsSelected) { #
    <tr>
        <td data-bind="text: name"></td>
        <td data-bind="text: age"></td>
    </tr>
    # } #

它旨在仅显示 IsSelected 值为 true 的记录。虽然它只显示两条记录 - 显示的记录不正确。这是什么原因?

fiddle :http://jsfiddle.net/Lijo/Z86dq/4/

代码

<html>
<head>
    <title>Template Filtering</title>
    <script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
    <script src="http://cdn.kendostatic.com/2013.2.716/js/kendo.all.min.js"></script>
      <script id="row-template" type="text/x-kendo-template">
        # if(IsSelected) { #
        <tr>
            <td data-bind="text: name"></td>
            <td data-bind="text: age"></td>
        </tr>
        # } #
    </script>
    <!--MVVM Wiring using Kendo Binding-->
    <script type="text/javascript">

        $(document).ready(function () {
            kendo.bind($("body"), viewModel);
        });

    </script>
    <script type="text/javascript">
        var viewModel = kendo.observable({

            employees: [
                        { name: "Lijo", age: "28", IsSelected: true },
                        { name: "Binu", age: "33", IsSelected: false },
                        { name: "Kiran", age: "29", IsSelected: true }
                       ]
        });

    </script>
    <style>
        table, th, td
        {
            border: 1px solid black;
        }
    </style>
</head>
<body>
    <table id="resultTable">
        <tbody data-template="row-template" data-bind="source: employees">
        </tbody>
    </table>
</body>
</html>

最佳答案

尝试将模板定义为:

<script id="row-template" type="text/x-kendo-template">
    # if(IsSelected) { #
    <tr>
        <td>#= name #</td>
        <td>#= age #</td>
    </tr>
    # } #
</script>

为了避免首先在 tbody 中然后在 td 中进行双重绑定(bind)。

编辑:为了避免引发 KendoUI 的错误问题,我会稍微更改您的代码,而不是使用 kendo.observable 我会使用实现过滤器DataSource

因此,您不需要打印或不打印模板中的行,而是在 DataSource 中设置过滤条件。

定义模板如下:

<script id="row-template" type="text/x-kendo-template">
    <tr>
        <td>#= name #</td>
        <td>#= age #</td>
    </tr>
</script>

您的 JavaScript 代码为:

var ds = new kendo.data.DataSource({
    data  : {
        employees: [
            { name: "Lijo", age: "28", IsSelected: true },
            { name: "Binu", age: "33", IsSelected: false },
            { name: "Kiran", age: "29", IsSelected: true }
        ]
    },
    schema: {
        data: "employees"
    },
    filter: { field: "IsSelected", operator: "eq", value: true }
});

我设置了一个过滤器来过滤掉isSelected不等于true的元素。

然后按如下方式初始化ListView:

$("#list").kendoListView({
    dataSource: ds,
    template  : $("#row-template").html()
});

您可以在此处查看代码:http://jsfiddle.net/OnaBai/Z86dq/16/

关于Kendo 模板内的 Javascript 给出了错误的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22075654/

相关文章:

javascript - 这个小鸟动画是怎么画的?

javascript - jQuery 精确数字匹配表排序

jquery - 从隐藏的 Div 表单中删除值

html - Base64 图像不会使用任何常用方法缩小

kendo-ui - 如何设置剑道 UI 网格宽度

javascript - jQuery addClass 通过 html 标签

javascript - 在 Summernote 中获取选定的内容

javascript - 复杂的jquery选择器: challenge

asp.net-mvc-3 - 输入 Kendo Tree 的数据格式应该是什么?

javascript - jQuery 错误 : too much recursion