Kendo MVVM使用远程数据源创建新记录

Kendo MVVM使用远程数据源创建新记录,mvvm,kendo-ui,Mvvm,Kendo Ui,我想我遗漏了一些简单的东西,但我找不到任何例子来说明如何做到这一点。。。另外,如果我使用的一些术语是错误的,请原谅我 我只想使用绑定到剑道可观察对象的HTML表单在远程数据源中创建一条新记录 我看到的所有示例都显示了如何编辑现有记录,但这不是我想要的(至少目前不是) 我已经创造了一个小提琴与一个简单的削减版本,我已经有了。很明显,它实际上不会保存记录,因为创建URL不会指向任何地方,但我相信我可以处理这个问题 谁能给我指一下正确的方向吗?谢谢 因为我不能发布一个没有它的问题,这里有一些从小提琴上

我想我遗漏了一些简单的东西,但我找不到任何例子来说明如何做到这一点。。。另外,如果我使用的一些术语是错误的,请原谅我

我只想使用绑定到剑道可观察对象的HTML表单在远程数据源中创建一条新记录

我看到的所有示例都显示了如何编辑现有记录,但这不是我想要的(至少目前不是)

我已经创造了一个小提琴与一个简单的削减版本,我已经有了。很明显,它实际上不会保存记录,因为创建URL不会指向任何地方,但我相信我可以处理这个问题

谁能给我指一下正确的方向吗?谢谢

因为我不能发布一个没有它的问题,这里有一些从小提琴上复制的代码:

var model = kendo.data.Model.define({
id: "id",
fields: {
    id: { type: 'number' },
    field1: { type: 'string' },
    field2: { type: 'string' },
    field3: { type: 'string' }
}
});

var viewModel = kendo.observable({
dataSource: new kendo.data.DataSource({
    type: 'json',
    transport: {
        create: {
            url: '/myurl/create',
            dataType: 'json',
            type: 'post'
        }
    },
    schema: {
        data: 'data',
        model: model
    }
});
});

kendo.bind($("#my-form"), viewModel);

让我们做的稍微不同

  • 您的表单不需要(应该)绑定到包含
    数据源的and对象
    ,因为您实际上并没有保存数据源,而是保存一条记录
因此,您应该将模型定义为:

var Model = kendo.data.Model.define({
    id: "id",
    fields: {
        id: { type: 'number' },
        field1: { type: 'string' },
        field2: { type: 'string' },
        field3: { type: 'string' }
    }
});
数据源
现在本身成为一个对象:

var dataSource = new kendo.data.DataSource({
    type: 'json',
    transport: {
        create: "/myurl"
    },
    schema: {
        model: Model
    }
});
您的可观察对象具有
数据
元素,该元素是定义的
模型(
新模型()
)的实例

因此,您的表单现在应该是:

<form id="my-form">
    <input name="field1" data-bind="value:data.field1" type="text" />
    <input name="field2" data-bind="value:data.field2" type="text" />
    <input name="field3" data-bind="value:data.field3" type="text" />
    <button data-bind="click: mySave">Save</button>
</form>

拯救

您修改的JSFIDLE

让我们做一些稍微不同的事情

  • 您的表单不需要(应该)绑定到包含
    数据源的and对象
    ,因为您实际上并没有保存数据源,而是保存一条记录
因此,您应该将模型定义为:

var Model = kendo.data.Model.define({
    id: "id",
    fields: {
        id: { type: 'number' },
        field1: { type: 'string' },
        field2: { type: 'string' },
        field3: { type: 'string' }
    }
});
数据源
现在本身成为一个对象:

var dataSource = new kendo.data.DataSource({
    type: 'json',
    transport: {
        create: "/myurl"
    },
    schema: {
        model: Model
    }
});
您的可观察对象具有
数据
元素,该元素是定义的
模型(
新模型()
)的实例

因此,您的表单现在应该是:

<form id="my-form">
    <input name="field1" data-bind="value:data.field1" type="text" />
    <input name="field2" data-bind="value:data.field2" type="text" />
    <input name="field3" data-bind="value:data.field3" type="text" />
    <button data-bind="click: mySave">Save</button>
</form>

拯救

你的JSFIDLE修改了

,这比我想象的要简单得多。非常感谢。事实上,如果您甚至没有考虑重用数据源,您甚至不需要使用数据源,您可以发布Ajax帖子或定义一个正常的HTML表单(没有可观察的对象),并让服务器管理它。数据源,可观察对象,。。。当您在页面的不同位置使用相同的信息并希望自动更新时,它非常方便。嗨,OnaBai。我发现Observable对象非常有用,因为我有几个与远程数据绑定的下拉列表——进行选择会更新各种其他字段的值。这对于可观察的物体来说很简单。然而,我还有一个问题,希望很简单。。。使用
ssowDataSource.add(this.data)保存数据后如何从服务器捕获响应以获取新记录id?非常感谢你的帮助!没关系。。。我可以使用数据源的requestEnd函数。谢谢你的帮助。这比我想的要简单得多。非常感谢。事实上,如果您甚至没有考虑重用数据源,您甚至不需要使用数据源,您可以发布Ajax帖子或定义一个正常的HTML表单(没有可观察的对象),并让服务器管理它。数据源,可观察对象,。。。当您在页面的不同位置使用相同的信息并希望自动更新时,它非常方便。嗨,OnaBai。我发现Observable对象非常有用,因为我有几个与远程数据绑定的下拉列表——进行选择会更新各种其他字段的值。这对于可观察的物体来说很简单。然而,我还有一个问题,希望很简单。。。使用
ssowDataSource.add(this.data)保存数据后如何从服务器捕获响应以获取新记录id?非常感谢你的帮助!没关系。。。我可以使用数据源的requestEnd函数。谢谢你的帮助。