1

我正在尝试使用列表视图显示项目列表,例如:

<div data-role="view" data-model="my_model">
    <ul data-role="listview" data-bind="source: ds" data-template="list-tmpl"></ul>
</div>

我有一个view使用模型的地方my_model和一个绑定到的地方。listviewsourceds

我的模型是这样的:

var my_model = kendo.observable({
    ds: new kendo.data.DataSource({
        transport: {
            read: readData,
            update: updateData,
            create: updateData,
            remove: updateData
        },
        pageSize: 10,
        schema: {
            model: {
                id: "id",
                fields: {
                    id: { type: "number" },
                    name: { type: "string" },
                    active: { type: "boolean" }
                }
            }
        }
    })
});

每个项目包括一个id,一个name(即一个string)和一个boolean命名的active

用于渲染每个元素的模板是:

<script id="list-tmpl" type="text/kendo-tmpl">
    <span>#= name # : #= active #</span>
    <input data-role="switch" data-bind="checked: active"/>
</script>

我在哪里显示name和(用于调试)的值active。另外,我渲染了一个switch绑定到active.

您应该会看到如下内容:

在此处输入图像描述

观察到的问题是:

  1. 如果你点击一个开关,你会看到active旁边的值name改变了它的值(如预期的那样)但是如果你选择另一个开关,值(既不在旁边name也不在DataSource)不会更新(尽管值开关已正确更新)。
  2. DataSource 中的update处理程序永远不会被调用(即使是第一个选择的开关,尽管第一个切换开关的 DataSource 已更新)。

您可以在 JSFiddle 中查看:http: //jsfiddle.net/OnaBai/K7wEC/

如何使 DataSource 得到更新并update调用处理程序?

4

1 回答 1

1

好的,解决方案非常简单:在定义中设置autoSync为。trueDataSource

var my_model = kendo.observable({
    ds: new kendo.data.DataSource({
        transport: {
            read: readData,
            update: updateData,
            create: updateData,
            remove: updateData
        },
        autoSync: true,
        pageSize: 10,
        schema: {
            model: {
                id: "id",
                fields: {
                    id: { type: "number" },
                    name: { type: "string" },
                    active: { type: "boolean" }
                }
            }
        }
    })
});

请参阅此处修改的 JSFiddle:http: //jsfiddle.net/OnaBai/K7wEC/1/

于 2014-06-06T21:22:42.600 回答