【问题标题】:Manually parse json data according to kendo model根据剑道模型手动解析json数据
【发布时间】:2015-05-12 10:13:09
【问题描述】:

Kendo UI 中是否有内置的即用型解决方案来根据schema.model 解析 JSON 数据? 也许像kendo.parseData(json, model) 这样会返回对象数组?

【问题讨论】:

  • 你的意思是json文本到javascript对象吗?
  • 是的,但根据某些模型,声明字段名称、类型和其他元数据的地方,
  • 我现在正在手动做这样的事情,但现成的解决方案会更好。

标签: json parsing data-binding model kendo-ui


【解决方案1】:

我正在寻找类似的东西,但找不到任何内置的东西。但是,使用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;
}

其中modelkendo.data.Model 定义(或简称datasource.schema.model),json 是原始对象。使用或修改它以接受和返回数组应该不会太难,但对于我的用例,我一次只需要解析一个对象。

【讨论】:

    【解决方案2】:

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

    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 采用模式而不是模型,并且处理模型的部分没有提取到它自己的方法中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-12-17
      • 2018-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多