Mvvm 如何在KendoUI中为底层JSON数据创建视图模型

Mvvm 如何在KendoUI中为底层JSON数据创建视图模型,mvvm,kendo-ui,telerik,kendo-ui-grid,Mvvm,Kendo Ui,Telerik,Kendo Ui Grid,我的问题是如何使用KendoObservable对象创建JSON数据(从.JSON文件解析)的视图模型对象 var viewModel = kendo.observable({ dtSource: new kendo.data.DataSource({ transport: { read: { url: "/data/SiteMaster.json", dataType: "json"

我的问题是如何使用KendoObservable对象创建JSON数据(从.JSON文件解析)的视图模型对象

var viewModel = kendo.observable({
    dtSource: new kendo.data.DataSource({
        transport: {
            read: {
                url: "/data/SiteMaster.json",
                dataType: "json"
            }
        },
        schema: {
            model: {
                fields: {
                    siteName: { type: "string" },
                    address: { type: "string" },
                    status: { type: "string" },
                    persons: { type: "string" }
                }
            }
        }
    }),
});
稍后我会将viewmodel对象绑定到div元素
kendo.bind($(“div”),viewModel

但是,我无法从JSON文件中读取内容 当我尝试在浏览器的开发人员控制台上调试时,未定义I get
dtSource

下面是我正在阅读的SiteMaster JSON文件

{ 
     "siteMaster":[ 
      { 
         "siteName" : "SHG",
         "filename" : "site1.json",
         "persons": 1,
         "status": "70%",
         "address": "BergesHill Road",
      },
      {
          "siteName" : "ABC",
          "filename" : "site2.json",
          "persons": 1,
          "status": "67%",
          "address": "BergesHill Road",
      },
      {
          "siteName" : "XYZ",
          "filename" : "site3.json",
          "persons": 1,
          "status": "80%",
          "address": "BergesHill Road",
      },
      {
          "siteName" : "Scots",
          "filename" : "site4.json",
          "persons": 1,
          "status": "80%",
          "address": "BergesHill Road",
      }]
}

我从代码中注意到两件事

  • 您的JSON仍然由“siteMaster”包装,它应该像[{},{},{},{}],而您的是{“siteMaster”:[{},{},{},{}]},或者您可以在数据源上的模型之后添加数据:“siteMaster”(看看我的示例)
  • 人数应该是多少
  • 为什么没有id(现在无关紧要)?但是如果没有它,就无法使用datasource.get()
  • 下面是一个工作示例,其中实现了我的发现,它确实起了作用
    
    html{
    字体大小:12px;
    字体系列:Arial、Helvetica、无衬线字体;
    }
    $(文档).ready(函数(){
    var json={
    “网站管理员”:[{
    “站点名称”:“SHG”,
    “文件名”:“site1.json”,
    “人”:1,
    “状态”:“70%”,
    “地址”:“BergesHill路”,
    }, {
    “站点名称”:“ABC”,
    “文件名”:“site2.json”,
    “人”:1,
    “状态”:“67%”,
    “地址”:“BergesHill路”,
    }, {
    “站点名称”:“XYZ”,
    “文件名”:“site3.json”,
    “人”:1,
    “状态”:“80%”,
    “地址”:“BergesHill路”,
    }, {
    “站点名称”:“苏格兰人”,
    “文件名”:“site4.json”,
    “人”:1,
    “状态”:“80%”,
    “地址”:“BergesHill路”,
    }]
    }
    var viewModel=kendo.observable({
    dtSource:new kendo.data.DataSource({
    数据:json,
    模式:{
    型号:{
    字段:{
    站点名称:{
    类型:“字符串”
    },
    地址:{
    类型:“字符串”
    },
    地位:{
    类型:“字符串”
    },
    人员:{
    类型:“编号”
    }
    }
    },
    数据:“网站管理员”,
    }
    }),
    });
    $(“#网格”).kendoGrid({
    数据源:viewModel.dtSource,
    身高:550,
    栏目:[{
    字段:“站点名称”,
    标题:“网站名称”
    }, {
    字段:“地址”,
    标题:“地址”
    }, {
    字段:“状态”,
    标题:“地位”
    }, {
    字段:“人员”,
    标题:“人”
    }]
    });
    bind($(“#网格”),viewModel);
    });