我已经指定了一个 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);
});
};
更新 2012 年 11 月 16 日上午
根据 Vyacheslav Voronchuk 的建议,我的 HTML 如下所示:
<ul id="placeComments" data-bind="foreach: { data: comments, afterAdd: addItem, afterRender: renderedComments, beforeRemove: removeItem }">
Javascript 看起来像这样:
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的原因。也许我应该换...