У меня недавно был почти такой же вопрос.
Большая разница для меня заключалась не в том, как хранить данные, а в лучшем способе отправки измененных данных.
Instantiate gridster и добавить каплю событие
$(".gridster ul").gridster({
draggable: {
stop: function(event, ui) {
window.setTimeout(SavePositions, 200); //short timeout to allow DOM to update
}
}
});
Таким образом, ваш по умолчанию gridster выглядит примерно так:
<div class="gridster ready">
<ul style="height: 480px; position: relative;">
<li data-row="1" data-col="1" data-sizex="2" data-sizey="1" class="gs_w"></li>
<li data-row="3" data-col="1" data-sizex="1" data-sizey="1" class="gs_w"></li>
<li data-row="3" data-col="2" data-sizex="2" data-sizey="1" class="gs_w"></li>
<li data-row="1" data-col="3" data-sizex="2" data-sizey="2" class="gs_w"></li>
</ul>
</div>
Обнаружение изменений может быть проблематичным, так что я отправить все данные для всех элементов сетки в в случае непреднамеренного перемещения.
function SavePositions() {
var gridElements = [];
$(".gridster > ul > .gs_w").each(function() {
gridElements.push({
Id: $(this).data("id"),
Priority: $(this).data("row"),
TypeId: $(this).data("col")
});
});
var data = { Gadgets: gridElements };
$.ajax({
type: 'POST',
url: "<whatever>",
data: data,
contentType: "application/json; charset=utf-8",
dataType: "json"
});
}
Однажды в вашем приложении вы можете манипулировать и хранить их, как вам нравится. Я лично использовал MongoDB, который позволял мне, как вы говорите, выполнять фильтрацию и упорядочивать данные. Хотя это не отделяет дизайн, это было чистое и динамичное решение. При хранении с использованием MongoDB, это выглядело примерно так:
{
Id: "83cd82f7-d024-4994-9f8d-0595472398e6",
Gadgets: [
{
Id: "8592c6b7-2b39-4b5c-ac08-0666b9fd6152",
Priority: 1,
TypeId: 1
},
{
Id: "8592c6b7-2b39-4b5c-ac08-0666b9fd6152",
Priority: 1,
TypeId: 2
},
{
Id: "8592c6b7-2b39-4b5c-ac08-0666b9fd6152",
Priority: 1,
TypeId: 3
}
]
}
Если вы хотите применить фильтр или заказ, вам нужен метод перестановки всевозможных строк и столбцы. Самая большая проблема, с которой я столкнулся, заключалась в добавлении, упорядочении или удалении из сетки и изменении других позиций. Я бы также избегал использования связанных списков в вашем случае, в то время как вы можете визуализировать столбцы в качестве связанных списков, элементы сетки могут взаимодействовать с другими столбцами и это важно, чтобы иметь возможность представлять/захватывать.
Например: На вашем изображении, если вы отфильтровали все элементы с приоритетом «1», вы оставите большие пробелы в верхней части страницы перед своими первыми элементами, поскольку ваши строки и столбцы будут сохранены в базе данных ,
Мой подход к этой проблеме включал двумерный массив как представление местоположений и размеров.
Надеюсь, я немного помог?