У меня есть модель представления, которая имеет несколько свойств коллекции с некоторой повторяющейся логикой. Мне нужно добавить новый пустой объект, удалить объект и убедиться, что в каждой коллекции есть хотя бы один объект, и если это единственный объект, кнопка «Удалить» должна быть отключена.KendoUI - UI не обновляется после извлечения повторяющихся функций
Чтобы извлечь эти общие функции Я продлил K endo.data.ObservableArray
:
function addEmpty() {
this.push({});
}
function hasMoreThanOne {
return this.length > 1;
}
var CoolObservableArray = kendo.data.ObservableArray.extend({
init: function(data) {
kendo.data.ObservableArray.fn.init.call(this, data);
this.addEmpty = addEmpty.bind(this);
this.hasMoreThanOne = hasMoreThanOne.bind(this);
}
});
Проблема с hasMoreThanOne
функции. Когда я создаю массив с одним элементом, кнопка «Удалить» отключается - это нормально, но когда я добавляю новые элементы, он не включается.
Чтобы обновить get
функции потребности UI кендо, чтобы назвать, но она нуждается в параметре, ссылающийся на имя свойства, которое будет изменяться для каждого экземпляра CoolObservableArray
, так что мне нужно написать повторять функции для каждой коллекции, как deleteXXXEnabled
, deleteYYYEnabled
и т. д. Как я могу избежать этого?
Вот скрипка размножению проблемы: http://dojo.telerik.com/AFOMa/2
Ларс, большое спасибо, это то, что я искал. Но не могли бы вы объяснить, зачем мне «setTimeout»? Если я опускаю его, новый элемент добавляется дважды в первый раз, после чего новые элементы добавляются как обычно. Почему это так? – nativehr
@nativehr Без таймаута сначала выполняется первое событие изменения, которое заставляет весь просмотр повторно отображать (включая добавленный элемент). Затем привязка получает другое событие изменения с e.type === "add" и отображает другой новый элемент. Таким образом, вы получаете 2 дополнительных рендеринга. –