【问题标题】:Fetch all record in the grid into an Array将网格中的所有记录提取到一个数组中
【发布时间】:2020-08-18 14:27:27
【问题描述】:

当单击button 时,我想获取网格内的所有数据,这些数据将存储到一个数组中,以便我可以使用 ajax 函数解析为 php。但我在网格occLevel_ 中有一个循环列。我需要帮助如何使用 for 循环获取所有 occLevel_0 -> 3 值。

Full Demo

$("#grid").kendoGrid({
  columns: [
    { field: "Name" },
    { field: "occlevel_0" },
    { field: "occlevel_1" },
    { field: "occlevel_2" },
    { field: "occlevel_3" },
  ],
  dataSource: {
   data: [{
        "Name": "John",
        "occlevel_0": 11,
        "occlevel_1": 31,
        "occlevel_2": 51,
        "occlevel_3": 61
      }, {
        "Name": "Jane",
        "occlevel_0": 12,
        "occlevel_1": 32,
        "occlevel_2": 52,
        "occlevel_3": 62
      }, {
        "Name": "James",
        "occlevel_0": 13,
        "occlevel_1": 33,
        "occlevel_2": 53,
        "occlevel_3": 63
      }],
   schema:{
    model: {
     id: "id",
    }
   }
  },
  editable: true
});


$("#fetch_allData").kendoButton();
var button = $("#fetch_allData").data("kendoButton");
button.bind("click", function(e) {
  var grid = $('#grid').data('kendoGrid').dataSource.data();
  console.log(grid);

  var items = {
    method: "updateOccLevel" //function call in php
  };
  for ( var i=0; i < grid.length; i++ ) {  
    items["Name_" + i] = grid[i]['Name'],
    items["occlvl_" + i] = grid[i]['occlevel_' + i]  // ???
  }; 
  console.log(items);


  /*$.ajax({
    url: "./updateOccLevel.php",
    type: "POST",
    data: items,
    success : function (data) {
          alert('success');
    }         
  });*/ 

});
<div id="grid"></div>
<button id='fetch_allData' >Update Grid</button>

【问题讨论】:

  • 这就是你想要的东西:find in nested array
  • 关于你的一件事对我来说很奇怪:你几乎每周都会发布问题并从很多人那里得到很多帮助,但我从来没有看到你支持他们......
  • 抱歉,接受答案和支持答案有什么不同?我以为两者都是一样的。好吧,在这种情况下,下次两者都会做。感谢您通知我。
  • @dontbannedme 再次,您可以随意投票,但如果有任何内容对您有用,则鼓励它,而不仅仅是接受的答案。只是说。

标签: javascript jquery kendo-ui


【解决方案1】:

只需在现有循环中使用一个附加循环:

for ( var i=0; i < grid.length; i++ ) {  
    items["Name_" + i] = grid[i]['Name'];

    for (let n = 0; n <= 3; n++) {
        items["occlvl_" + i + "_" + n] = grid[i]['occlevel_' + n]  // ???
    }
}; 

工作sn-p:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8"/>
    <title>Kendo UI Snippet</title>

    <link rel="stylesheet" href="https://kendo.cdn.telerik.com/2020.1.219/styles/kendo.default-v2.min.css"/>

    <script src="https://code.jquery.com/jquery-1.12.4.min.js"></script>
    <script src="https://kendo.cdn.telerik.com/2020.1.219/js/kendo.all.min.js"></script>
</head>
<body>
  
<div id="grid"></div>
  <button id='fetch_allData' >Update Grid</button>
<script>
  $("#grid").kendoGrid({
    columns: [
      { field: "Name" },
      { field: "occlevel_0" },
      { field: "occlevel_1" },
      { field: "occlevel_2" },
      { field: "occlevel_3" },
    ],
    dataSource: {
     data: [{
          "Name": "John",
          "occlevel_0": 11,
          "occlevel_1": 31,
          "occlevel_2": 51,
          "occlevel_3": 61
        }, {
          "Name": "Jane",
          "occlevel_0": 12,
          "occlevel_1": 32,
          "occlevel_2": 52,
          "occlevel_3": 62
        }, {
          "Name": "James",
          "occlevel_0": 13,
          "occlevel_1": 33,
          "occlevel_2": 53,
          "occlevel_3": 63
        }],
     schema:{
      model: {
       id: "id",
      }
     }
    },
    editable: true
  });
  
  
$("#fetch_allData").kendoButton();
var button = $("#fetch_allData").data("kendoButton");
button.bind("click", function(e) {
    var grid = $('#grid').data('kendoGrid').dataSource.data();
  
    var items = {
      method: "updateOccLevel" //function call in php
    };
    for ( var i=0; i < grid.length; i++ ) {  
			items["Name_" + i] = grid[i]['Name'];
      
      for (let n = 0; n <= 3; n++) {
      	items["occlvl_" + i + "_" + n] = grid[i]['occlevel_' + n]  // ???
      }
    }; 
  	console.log(items);
  
  
});
</script>
</body>
</html>

【讨论】:

    【解决方案2】:

    这样做:

    const myObj ={
          columns: [
            { field: "Name" },
            { field: "occlevel_0" },
            { field: "occlevel_1" },
            { field: "occlevel_2" },
            { field: "occlevel_3" },
          ],
          dataSource: {
           data: [{
                "Name": "John",
                "occlevel_0": 11,
                "occlevel_1": 31,
                "occlevel_2": 51,
                "occlevel_3": 61
              }, {
                "Name": "Jane",
                "occlevel_0": 12,
                "occlevel_1": 32,
                "occlevel_2": 52,
                "occlevel_3": 62
              }, {
                "Name": "James",
                "occlevel_0": 13,
                "occlevel_1": 33,
                "occlevel_2": 53,
                "occlevel_3": 63
              }],
           schema:{
            model: {
             id: "id",
            }
           }
          },
          editable: true
        };
    
    idArray = []
    
    function func(obj) {
       idArray.push(obj["occlevel_0"]);
       if (!obj.children) {
           return
       }
    
       obj.children.forEach(child => func(child))
    }
    
    
    func(myObj);
    console.log(idArray);
    

    【讨论】:

      【解决方案3】:

      我不确定你想要什么,但你可以遍历对象属性。提取键和值。

      var data = $('#grid').getKendoGrid().dataSource.data().toJSON();
      
      var newItems = [];
      
      for(var i = 0; i <  data.length; i++) {
        var item = data[i];
        var newItem = {};
      
        for (var prop in item) {
          console.log(prop + " = " +item[prop]);
          newItem[prop] = item[prop];
        }
      
        newItems.push(newItem);
      }
      
      console.log(newItems);
      

      如果这不是您想要的,请用数组的外观更新问题

      示例:Looping object properties

      【讨论】:

      • 提示:您不需要为此使用JSON.parse 和JSON.stringify,有一个名为toJSON() 的方法可以从数据源的数据中返回纯JSON 对象列表,例如dataSource.data().toJson().
      猜你喜欢
      • 1970-01-01
      • 2013-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-21
      • 1970-01-01
      相关资源
      最近更新 更多