Kendo MVVM - 对数据源的简单值绑定

时间:2014-07-15 19:20:36

标签: mvvm kendo-ui kendo-dataviz kendo-mvvm

我想学习如何在Kendo MVVM中将页面上的输入绑定到数据源。简单地说,我说有以下html:

<div id="configDiv">
    Call:<input data-bind="value: SystemCall" type="text" /><br />
    <button data-bind="click: save">Save</button>
</div>

以下视图模型:

var self = this;

    var Model = kendo.data.Model.define({
        id: "SystemId",
        fields: {
            SystemCall: { editable: true }
        }
    });

        self.ViewModel = kendo.observable({
            dataSource: new kendo.data.DataSource({
                transport: {
                    read: "/api/ServiceApi?method=Ref/SystemConfig/",
                    type: "GET"
                },
                schema: {
                    model: Model
                }
            }),
            save: function (e) {
                alert("save config");
            },
        });
        kendo.bind($("#configDiv"), self.ViewModel);

这个想法是,从读取url以json格式返回的SystemCall的值将绑定到html中的输入字段。出了点问题 因为这不起作用。我已经在网上搜寻一个简单的例子,没有比这更复杂,也找不到它。如何开始的任何帮助将是 非常感谢。

1 个答案:

答案 0 :(得分:2)

我没有完整的工作示例可以分享,但我可以指出一些事情。


Kendo DataSources希望您的服务器返回一个项目数组,因此如果您的服务器返回单个对象,例如JSON:

{
    "SystemId": 1,
    "SystemCall": "one"
}

然后它不知道如何处理它,因为它不是一个数组。它期望像:

[
    {
        "SystemId": 1,
        "SystemCall": "one"
    },
    {
        "SystemId": 2,
        "SystemCall": "two"
    }
]

您的MVVM绑定无法正常工作,因为您将其绑定到&#34; SystemCall&#34;但是您的ViewModel对象没有名为&#34; SystemCall&#34;的属性。那些将在ViewModel.dataSource

中的一个项目中

由于DataSource需要包含数据项数组,因此它通常绑定到ListView或Grid小部件以显示每个数据项。 ListView中的每个行模板都可以具有该系统的输入元素。


Model中,id字段应该包含在fields列表中,如下所示:

var Model = kendo.data.Model.define({
    id: "SystemId",
    fields: {
        SystemId: { type: "number" }, // assuming this is a number.
        SystemCall: { editable: true }
    }
});

我知道这不是一个完整的答案,但我希望这至少会让你朝着正确的方向前进......