我的KnockoutJS模板如下所示:
<div id="wrapper" data-bind="template: {
name:'theTemplate',
foreach: cars(),
beforeRemove: function(elem) {
console.log(elem);
console.log('try removing..');
try {
jQuery(elem).hide().remove();
} catch (e) {
console.log(e);
}
},
afterAdd: function(elem) {
console.log('try adding..');
try {
jQuery(elem).hide().fadeIn();
} catch (e) {
console.log(e);
}
}
}"></div>
当我从cars()observableArray中删除一个对象时,我想隐藏()并删除()要删除的元素。除了删除元素之外,beforeRemove函数被调用三次,其中三个不同的元素作为参数。
这三个要素是:
Comment { data=" Block 1 ", length=9, nodeName="#comment", meer...}
尝试删除..
<TextNode textContent=" ">
尝试删除..
<div class="block">
尝试删除..
afterAdd的行为方式相同..这是一个错误,还是我对该函数的理解不正确?
谢谢你的时间!
答案 0 :(得分:2)
如果您的模板包含这些元素,我相信这是预期的行为。
如果您只想隐藏/显示特定元素 - 例如,&lt; div&gt;元素 - 你想要做一个jQuery选择器来过滤元素:
afterAdd: function(elem) {
console.log('try adding..');
try {
jQuery(elem).filter("div").hide().fadeIn();
} catch (e) {
console.log(e);
}
}
相关:我不建议在HTML中放置大的javascript函数。它混乱了HTML并混淆了视图和视图逻辑的关注。我会做这样的事情:
<div id="wrapper" data-bind="template: {
name:'theTemplate',
foreach: cars,
beforeRemove: onRemovingCar,
afterAdd: onAddedCar
}"></div>
<script type="text/javascript">
var viewModel = {
onRemovingCar: function(element) {
console.log(element);
console.log('try removing..');
try {
jQuery(element).hide().remove();
} catch (e) {
console.log(e);
}
},
onAddedCar: function(element) {
console.log('try adding..');
try {
jQuery(element).hide().fadeIn();
} catch (e) {
console.log(e);
}
}
};
</script>