Kendo ui 剑道ui表单更新取消按钮

Kendo ui 剑道ui表单更新取消按钮,kendo-ui,kendo-mvvm,Kendo Ui,Kendo Mvvm,我正在尝试一个简单的剑道界面形式与'保存'和'取消'按钮。我正在使用Kendo.Observable将数据绑定到表单。 我试图实现的功能是,如果单击“保存”按钮,表单数据将被保存。否则,如果单击“取消”,表单将返回到只读模式,并显示以前的数据。为此,我首先在单击“更新”按钮时将模型数据保存在“originalvalue”属性中。如果单击“取消”,则“字段”模型数据将恢复为“原始值”。但问题是,“originalvalue”不包含原始值。当用户在“保存”过程中进行编辑时,它会得到更新。 问题是-如

我正在尝试一个简单的剑道界面形式与'保存'和'取消'按钮。我正在使用Kendo.Observable将数据绑定到表单。 我试图实现的功能是,如果单击“保存”按钮,表单数据将被保存。否则,如果单击“取消”,表单将返回到只读模式,并显示以前的数据。为此,我首先在单击“更新”按钮时将模型数据保存在“originalvalue”属性中。如果单击“取消”,则“字段”模型数据将恢复为“原始值”。但问题是,“originalvalue”不包含原始值。当用户在“保存”过程中进行编辑时,它会得到更新。 问题是-如何保留原始模型数据以便在取消时刷新? 请找到下面的代码。谢谢你的帮助,谢谢

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

        updated: false,
        originalvalue: {},

        update: function(e) {
            var original = this.get("fields");
            this.set("originalvalue", original);
            this.set("updated", true);
        },

        save: function(e) {
             e.preventDefault();
             if (validator.validate()) {
                    // make an ajax call to save this data
                    this.set("updated", false);
             } 

        },

        cancel: function(e) {
            var original = this.get("originalvalue");
            validator.destroy();
            this.set("fields", original);
            this.set("updated", false);

        },

        fields: {}
    });

    viewModel.set("fields", formArray);     
    kendo.bind($("#outerForm"), viewModel);

    // prepare the validator
    var validator = $("#outerForm").kendoValidator().data("kendoValidator");

var viewModel=kendo.observable({
更新:错,
原始值:{},
更新:职能(e){
var original=this.get(“字段”);
本套(“原始值”,原件);
此.set(“已更新”,true);
},
保存:功能(e){
e、 预防默认值();
if(validator.validate()){
//进行ajax调用以保存此数据
此.set(“已更新”,false);
} 
},
取消:功能(e){
var original=此.get(“原始值”);
destroy();
本.集(“字段”,原件);
此.set(“已更新”,false);
},
字段:{}
});
viewModel.set(“字段”,formArray);
bind($(“#outerForm”),viewModel);
//准备验证器
var validator=$(“#outerForm”).kendoValidator().data(“kendoValidator”);

我必须在我目前正在开发的表单上制作准确的东西。我正在为数据使用DataSource对象,因此必须使用cancelChange()

我在那里做的事情: 1.我创建了一个具有模式的数据源:

 ... schema: {
model: {id: "id"}}
...
二,。我使用映射id获取了正在编辑的对象:

clientDataSource.cancelChanges(clientDataSource.get(this.get("contactID")));
其中ContactID是在我已传递ID的setData函数中创建的:

 this.set("contactID", contactID);
正如我可能已经注意到并理解的,这里还有另一个问题,您没有使用数据源,而是使用字段的数据? 这里的问题是,您的原始值位于可观察对象内部,它引用了变量original,因此它具有可观察属性。您应该在可观察对象之外定义变量原始值

var originalValue;

var viewModel = kendo.observable ({ ...
您还应将formArray发送到该变量,以便在加载可观察对象之前,您将获得默认加载,例如:

originalValue =   formArray;  
viewModel.set("fields", formArray);  
因此,当您需要取消时,您应该:

cancel: function(e) {
            var original = originalValue;
            validator.destroy();
            this.set("fields", original);
            this.set("updated", false);

        }, 
我还没有测试过它,但它应该为您提供一些解决该问题的指导