我想学习如何在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中的输入字段。出了点问题 因为这不起作用。我已经在网上搜寻一个简单的例子,没有比这更复杂,也找不到它。如何开始的任何帮助将是 非常感谢。
答案 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 }
}
});
我知道这不是一个完整的答案,但我希望这至少会让你朝着正确的方向前进......