Кендо редактировать шаблон массива
У меня есть следующий пример кендо с пользовательским шаблоном редактирования:
В примере есть пользовательский шаблон редактирования, поэтому при двойном щелчке по календарю для создания нового события это будет отображаться с настраиваемыми полями.
Для контактов есть специальное поле, в котором в качестве источника данных используется массив.
Этот источник данных является массивом, который я получаю с сервера (на получение которого уходит 1-2 секунды). Тот факт, что шаблон редактирования подготовлен с тегами, делает невозможным просто создать в моем случае успешный (или готовый) обработчик вызова ajax, который получает данные.
Единственный способ, которым я вижу, - это подготовить данные при загрузке страницы, чтобы шаблон взял их.
Однако я хочу либо создать шаблон всякий раз, когда выполняется загрузка данных, либо добавить в него свои данные после его загрузки.
Чтобы смоделировать время, необходимое серверу для загрузки данных, я использую setTimeout, равный 1 секунде, таким образом шаблон редактирования не собирает данные.
Для воссоздания:
- дважды щелкните календарь, чтобы создать событие
- обратите внимание, что поле контакта пусто (потому что данные не готовы при загрузке страницы)
Любая помощь приветствуется
1 ответ
Это не имеет ничего общего с асинхронной задержкой. Ваш kontaktdata
массив является локальным для анонимной функции, которую вы передаете setTimeout
поэтому он просто не существует в контексте, в котором оценивается шаблон.
Ваши данные должны быть определены либо в самой модели данных, либо в глобальном контексте.
Другая проблема заключается в том, что сама структура данных должна существовать - либо kendo.data.DataSource
или массив, и вам нужно обновить его новыми данными, если вы хотите, чтобы существующее представление знало об этих новых данных. Если вы просто замените его, шаблон редактирования не сможет сразу его забрать (если вы откроете новый диалог редактирования, он, конечно же, тоже будет работать).
Так, если вы сделаете это, например, это будет работать:
var kontaktdata = [];
setTimeout(function(){
kontaktdata.push.apply(kontaktdata, [
{ text: "Demo B Client", value: 1 },
{ text: "Martin", value: 2 },
{ text: "Herbert", value: 3 }]);
}, 4000);