2013-07-15 2 views
0

У меня есть приложение, в котором перечислены события, которые произошли за любой данный день. Приложение отображает DateTimePicker, и пользователь выбирает дату. Если в этот день есть события, появляется сетка для отображения найденных записей.Как показать/скрыть сетку?

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

Выполнение следующих не достаточно, и я должен знать, что я не хватает, чтобы получить желаемое поведение:

var grid = $("#grid").data("kendoGrid"); 
grid.destroy(); 
+1

Пожалуйста, не создавайте и не разрушайте сетки. Если структура Grid всегда одна и та же, как кажется из описания вашей проблемы, просто измените условия фильтрации в источнике данных, связанном с сеткой.Он намного быстрее, меньше потребляет память и в основном намного проще программировать. – OnaBai

+0

Так что я должен «уничтожить» его внутренний источник данных? ... Как это сделать ... как получить доступ к внутреннему источнику данных? – Tuthmosis

+0

Чтобы получить доступ к источнику данных, вы можете сделать «$ (« # grid »). Data (« kendoGrid »). DataSource', но опять же, нет, не уничтожайте ничего, просто измените условие фильтрации или перечитайте dataSource. Как вы получаете данные с сервера? Не могли бы вы показать свое определение сетки и данных? Затем я могу показать вам, как это сделать с вашим кодом. Отредактируйте исходное сообщение для его включения. – OnaBai

ответ

0

Согласно http://docs.kendoui.com/api/web/grid#methods-destroy, что следует удалить все обработчики событий и т.д. из сетки ,
После этого вам просто нужно, чтобы удалить его из DOM, т.е.

$("#grid").remove();http://jsfiddle.net/giltnerj0/JFy2C/

+0

Сетка должна быть перерисована, поэтому я думаю, что было бы лучше, как упоминалось в OnaBai, а не полностью удалить ее из DOM. Я просто хочу, чтобы он был недоступен в основном в случае, если недавно выбранная дата не содержит никаких записей о событиях для базы данных ... – Tuthmosis

0

Вам не нужно уничтожить ни сетки, ни DataSource. Вместо этого поймайте любое изменение в дате и вызовите DataSource.read.

Шаги:

  • определить DateTimePicker (или просто DatePicker или календарь), в зависимости от ваших потребностей.

HTML:

<input id="date"/> 

JavaScript:

var evDate = $("#date").kendoDateTimePicker({ 
    value : new Date(), 
    change: function() { 
     ds.read(); 
    } 
}).data("kendoDateTimePicker"); 
  • Определение DataSource для получения событий с сервера. Предположим, что url для обработки запроса GetEvents, который получает в запросе аргумент date, который является датой событий. Пример GetEvents?date=Mon+Jul+15+2013+19%3A44%3A55+GMT%2B0200+(CEST)

JavaScript:

var ds = new kendo.data.DataSource({ 
    transport: { 
     read: { 
      url : "GetEvents.php", 
      data: function() { 
       return { "date": evDate.value() } 
      } 
     } 
    }, 
    schema : { 
     model: { 
      id : "id", 
      fields: { 
       event: { type: "string" }, 
       date : { type: "date" } 
      } 
     } 
    }, 
    pageSize : 10 
}); 
  • Определить сетку, используя предыдущий DataSource:

JavaScript

var grid = $("#grid").kendoGrid({ 
    dataSource: ds, 
    editable : false, 
    pageable : true, 
    columns : [ 
     { field: "id", width: 60, title: "#" }, 
     { field: "date", width: 140, title: "Date", format: "{0:yyyy-MM-dd HH:mm}" }, 
     { field: "event", width: 400 } 
    ] 
}).data("kendoGrid"); 

Так трюк образующую change в DateTimePicker: каждый раз, когда вы меняете дату, она вызывает событие change, где вы вызываете grid.read().

Сетка transport.read определяет в качестве аргумента (transport.read.data) date плюс значения считанного из DateTimePicker.

+0

Спасибо OnaBai ... но я, вероятно, ошибся в том, как я объяснил свою ситуацию. Приложение уже делает все это. Я извлекаю новые данные на основе новой даты ... все работает ... Просто мне нужно знать, как очистить сетку, чтобы она исчезла из окна приложения или заменила ее новым с новым данные на основе этой новой даты. Итак, вы говорите, что мне просто нужно воссоздать новую сетку с тем же элементом DOM? – Tuthmosis

+0

Нет, я бы сказал, что вы не ошиблись. Я понимаю, что у вас уже есть код, который я не могу получить, почему _obsession_ об уничтожении сетки. Поверьте мне, это вызовет у вас проблемы, и ваше приложение будет медленнее. Почему 'ds.read()' внутри события 'change'' DatePicker' недостаточно для вас? Это обновит сетку событиями для новой даты. – OnaBai

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