2010-07-12 3 views
16

HI, Я смотрю на SlickGrid, и я могу видеть пример о том, как редактировать ячейку, однако я сохраняю эти изменения. Мне еще предстоит найти пример, который подскажет мне, как это сделать.Сохранение изменений в SlickGrid

ответ

18

Уловка для сохранения SlickGrid заключается в том, чтобы понять, что сетка обновит массив данных, который вы предоставили при создании сетки при редактировании ячеек.

Путь, который я затем сохраняю, это включить форму с кнопкой отправки и скрытое поле под сеткой. Я задерживаю событие отправки и использую JSON plugin для сериализации массива и размещения его в скрытом поле. На стороне сервера вы получите строку JSON, которую вы можете десериализировать, пропустить и записать в базу данных.

Если предположить, что массив данных называется «данные», как образцы, должна работать для вас:

<form action="?" method="POST"> 
    <input type="submit" value="Save"> 
    <input type="hidden" name="data" value=""> 
</form> 
<script> 
    $(function() { 
    $("form").submit(
     function() { 
     $("input[name='data']").val($.JSON.encode(data)); 
     } 
    ); 
    }); 
</script> 
+0

HI Джим, это идея, с которой я пошла. Мысль там, возможно, некоторые другие реализации, но не думаю. Это прекрасно, спасибо. – Rubans

+0

Это просто приносит мне пустую сетку после нажатия кнопки сохранения. Что я делаю не так? – randomizertech

+0

Просто хочу добавить, что с использованием браузера по умолчанию ['JSON.stringify'] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify) должно быть просто отлично Эти дни. Не нужно идти по плану плагина jQuery, если вам не нужно поддерживать некоторые действительно старые браузеры. – user128216

4

Хотя я лично с помощью JSON сериализации и представить в подходе скрытого поля from my previous answer других подход может заключаться в том, чтобы уловить событие onCellChange, запущенное SlickGrid после изменения значения ячейки и сделать вызов Ajax серверу для сохранения измененного значения. Это приведет к большому количеству небольших запросов Ajax на сервер (что может увеличить нагрузку), но обновляет сервер сразу после внесения изменений.

+0

Я реализую пример таким образом, но я бы предпочел ваш первый пример, когда пакетные обновления обрабатываются, но я могу видеть преимущества обоих, безусловно, замечательно видеть, что по крайней мере кто-то еще использует его;) – Rubans

+0

Я предпочитаю сам пакетный метод , но я думал, что добавлю другую идею для полноты :) –

+0

Гораздо лучше и надежнее, чем пакетный метод imo. – EarlyPoster

16

Для полноты, минимальный пример, демонстрирующий использование onCellChange, о котором говорится в сообщении Jim OHalloran.

Для получения дополнительной информации и просмотра всех событий, которые могут быть использованы аналогично onCellChange, см. Комментарии в начале SlickGrid source.

<head> 
    <!-- boilerplate omitted ... --> 
    <script type="text/javascript"> 
     var grid; 

     var options = { 
      enableCellNavigation: true, 
      enableColumnReorder: false, 
      autoEdit: false, 
      editable: true, 
     }; 

     var columns = [ 
      {id: "item_key", name: "Key", field: "item_key" }, 
      {id: "value", name: "value", field: "value", editor: LongTextCellEditor } 
     ]; 

     var data = [ 
      {item_key: "item1", value: "val1"}, 
      {item_key: "item2", value: "val2"}, 
     ]; 

     $(document).ready(function() { 
      grid = new Slick.Grid($("#myGrid"), data, columns, options); 

     //Earlier code for earlier version of slickgrid 
     // grid.onCellChange = function (currentRow, currentCell, item) { 
     //  alert(currentRow+":"+currentCell+"> key="+item['item_key']+", value="+item['value']); 

      //Updated code as per comment. 
      grid.onCellChange.subscribe(function (e,args) { 
       console.log(args); 
      }); 

      }; 
     }); 
    </script> 

</head> 
<body> 
    <div id="myGrid" style="height:10em;"> </div> 
</body> 
+4

API-интерфейс для этого метода несколько изменился: 'grid.onCellChange.subscribe (функция (е, арг) { console.log (аргументы); });' Args является объектом с, рядом клеток, объект сетки и отредактированный элемент. – Solsys

+0

@Iclark Можете ли вы объяснить, как настроить таргетинг на конкретную ячейку для обновления db? Поскольку ваши данные в основном представляют собой пару ключевых значений, где ключ должен соответствовать значению ключа поля столбца, я не вижу, как я могу предоставить уникальный идентификатор моего элемента ячейки, чтобы я мог сопоставить этот элемент с объектом базы данных? Как я могу передать уникальный идентификатор моего элемента ячейки, где, когда я делаю обновление БД, я обновляю только элемент из измененной ячейки, а не всей сетки? – Marko

+0

хорошо один. Я использовал реализацию хэш-таблицы javascript для сбора измененных строк (http://www.mojavelinux.com/articles/javascript_hashes.html) – Amit

Смежные вопросы