根据剑道模型手动解析json数据

根据剑道模型手动解析json数据,json,parsing,data-binding,model,kendo-ui,Json,Parsing,Data Binding,Model,Kendo Ui,Kendo UI中的任何内置即用解决方案都可以根据schema.model解析JSON数据吗? 可能类似于kendo.parseData(json,model),它将返回对象数组?在你发布文章的那天,我确实看到了你的文章,但没有答案。作为重构的一部分,我只需要自己解决这个问题。我的解决方案是针对数据源,而不是直接针对模型 kendo.data.DataSource.prototype.parse = function (data) { return this.reader.data(da

Kendo UI中的任何内置即用解决方案都可以根据
schema.model
解析JSON数据吗?
可能类似于
kendo.parseData(json,model)
,它将返回对象数组?

在你发布文章的那天,我确实看到了你的文章,但没有答案。作为重构的一部分,我只需要自己解决这个问题。我的解决方案是针对数据源,而不是直接针对模型

kendo.data.DataSource.prototype.parse = function (data) {
    return this.reader.data(data);
    // Note that the original data will be modified. If that is not what you want, change to the following commented line
    // return this.reader.data($.extend({}, data));
}

// ...

someGrid.dataSource.parse(myData);

如果您想直接使用一个模型,那么需要查看kendo.data.js中的DataReader类,并使用类似的逻辑。不幸的是,DataReader采用的是模式而不是模型,处理模型的部分没有用自己的方法提取。

我在搜索类似的内容,但找不到任何内置内容。然而,使用
Model.set
显然使用了每个字段的解析逻辑,因此我最终编写了这个功能,它工作得非常好:

function parse(model, json) {
    // I initialize the model with the json data as a quick fix since
    // setting the id field doesn't seem to work. 
    var parsed = new model(json);
    var fields = Object.keys(model.fields);
    for (var i=0; i<fields.length; i++) {
        parsed.set(fields[i], json[fields[i]]);
    }
    return parsed;
}
函数解析(模型,json){
//我使用json数据初始化模型作为快速修复,因为
//设置id字段似乎不起作用。
var parsed=新模型(json);
变量字段=Object.keys(model.fields);

对于(var i=0;ido)您是指json文本到javascript对象吗?是的,但根据一些模型,其中声明了字段名、类型和其他元数据,我现在手动执行smth,但就绪解决方案会更好。