Получить все записи в сетке в массив - PullRequest
1 голос
/ 04 мая 2020

Когда нажимаете button, я хочу получить все данные внутри сетки, и эти данные будут сохранены в массив, чтобы я мог использовать функцию ajax для анализа в php. Но у меня был столбец oop в сетке occLevel_. Мне нужна помощь, как мне получить все значения occLevel_0 -> 3, используя для l oop.

Полная демонстрация

$("#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>

Ответы [ 3 ]

1 голос
/ 04 мая 2020

Просто используйте дополнительный l oop внутри существующего l oop:

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]  // ???
    }
}; 

Рабочий фрагмент:

<!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>
0 голосов
/ 04 мая 2020

Я не уверен, что вы хотите, но вы можете l oop через свойства объекта. Извлечь ключ и значение.

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);

Если это не то, что вам нужно, обновите вопрос о том, как должен выглядеть массив

Пример: Зацикливание свойств объекта

0 голосов
/ 04 мая 2020

Делай так:

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...