在某些情况下,忽略add之后和remove之前的foreach
Ignore foreach afterAdd and beforeRemove in certain situations
当页面加载时,我有一个通过Ajax获得的用户数组,并使用foreach
绑定列出它们,如下所示:
<div data-bind="foreach: { data: usersArr,
afterAdd: showElement,
beforeRemove: fadeRemove }">
我希望列表显示在页面加载没有的fadeIn()
效果,我使用afterAdd
应用于它,并在我清空usersArr
数组时消失,没有beforeRemove
射击。
我只想在添加新用户或删除现有用户时触发效果。
有办法做到这一点吗?
在userArr
中一次加载所有数据,而不是逐个推送:
viewmodel.userArr(receivedArray); //instead of viewmodel.userArr.push(newElement)
编辑
上面的不起作用。afterAdd
和beforeRemove
绑定不关心如何添加/删除元素,它们在任何情况下都将被调用。
这是一个丑陋的技巧:添加一个allowAnimation
变量到你的视图模型,并运行代码只有当它被设置(告诉你它是丑陋的):
ViewModel.prototype.showElement = function(elem, index, user) {
if (user.allowAnimation) {
if (elem.nodeType === 1) {
$(elem).hide().fadeIn();
user.allowAnimation = false;
}
}
};
ViewModel.prototype.fadeRemove = function(elem, index, user) {
if (user.allowAnimation) {
if (elem.nodeType === 1) $(elem).fadeOut(500, function() {
$(elem).remove();
user.allowAnimation = false;
});
} else {
$(elem).remove();
}
};
ViewModel.prototype.addUser = function() {
this.usersArr.push({name: 'bla', allowAnimation: true});
};
ViewModel.prototype.removeUser = function(user) {
user.allowAnimation = true;
this.usersArr.remove(user);
};
检查提琴
相关文章:
- Foreach无法在Typescript中工作
- $rootScope未使用forEach进行更新
- 如何制作简单的php'在Javascript中的foreach等价物
- chart.series[id].remove()无法刷新高位图表/高位股票中其他系列的图例属性
- jQuery.remove(Selector)没有'不起作用
- 用独立变量敲除foreach绑定
- Knockout.JS标签在foreach内部不起作用
- 在foreach中获取ajax结果
- 如何在foreach循环中对每个产品单独应用评级系统
- 如果数组仍在执行,async.forEach()将运行我添加到数组中的新元素
- 错误:Can't在从forEach循环发送标头后设置标头
- 使用rows().eevery().remove()时未更新行索引
- 为什么我们在ES2015中需要一个新的for循环结构,而我们已经有了for、forEach
- 在foreach中加载所有项后,Knockoutjs组件回调
- Javascript:foreach跳过第一个索引(0)
- 嵌套foreach逐字母读取值,而不是整个单词
- Foreach无法在php和Jquery中工作
- 如何在PHP foreach中使用ajax
- 在输入forEach(javascript)时重置变量
- 在某些情况下,忽略add之后和remove之前的foreach