Я указал привязку afterAdd, поэтому при добавлении элемента в observableArray я получаю красивый эффект slideDown. Отлично работает, круто выглядит.
Проблема в начальной загрузке. Я загружаю из источника данных и устанавливаю observableArray для возвращаемых данных json. Представьте себе 20 элементов на экране, которые одновременно скользят вниз. Не так уж круто. Как я могу предотвратить это?
Функция слайда:
vm.addItem = function (elem) {
if (elem.nodeType === 1) { $(elem).hide().slideDown(); }
};
Выглядит красиво при добавлении одного элемента:
vm.postComment = function () {
$.post('Place/PostComment', { placeId: vm.placeId(), comment: vm.comment() }, function (comment) {
vm.comments.push(comment);
vm.comment('');
});
};
Не так приятно при установке начального значения. Скользя вниз для каждого добавленного:
vm.loadPlace = function () {
$.getJSON('Place/GetComments', { placeId: vm.placeId() }, function (data) {
vm.comments(data.Comments);
});
};
Обновление от 16 ноября 2012 г., утро
По предложению Вячеслава Ворончука мой HTML выглядит так:
<ul id="placeComments" data-bind="foreach: { data: comments, afterAdd: addItem, afterRender: renderedComments, beforeRemove: removeItem }">
Джаваскрипт выглядит так:
vm.renderedComments = function () {
loading = false;
};
vm.addItem = function (elem) {
if (!loading) {
if (elem.nodeType === 1) {
$(elem).hide().slideDown();
}
}
};
vm.loadPlace = function () {
$.getJSON('Place/GetPlace', { placeId: vm.placeId() }, function (data) {
loading = true;
vm.comments(data.Comments);
});
};
До сих пор смотрю анимацию. Используя отладчик, я вижу, что он дважды входит в функцию addItem.
Кстати, я предполагаю, что именно поэтому в документации используется fadeIn вместо slideDown. Может быть, я должен переключиться...