我有一个敲门事件绑定到一个按钮:
<button type="button" id="uBtn" class="btn btn-info btn-lg" data-preview-file-type="text" data-bind="
click: upload,
visible: files().length > 0 && !anyErrors() ">
</button>
当我从视图模型中的可观察数组中删除单个项目时,每个项目仍然正常工作:
this.removeFileItem = function (elem) {
self.files.remove(elem);
};
<button type="button" class="close" data-bind="click: $parent.removeFileItem, visible: !isUploading()">×</button>
仅当我尝试删除所有开始遇到问题的项目时:
this.clearUploads = function() {
if (self.uploaded && self.files().length > 0) {
//self.files.removeAll();
//self.files([]);
/*for (var i = 0; i < self.files().length; i++) {
self.files.remove(self.files()[i]);
}*/
ko.utils.arrayForEach(self.files(), function(item) {
self.files.remove(item);
});
self.upload = false;
}
}
一旦我清除了可观察数组,我的'uBtn'上的点击处理程序就不再有效了。正如你上面所说,我试图以各种方式清除阵列,但它并没有什么不同。即使只有一个项目要清除,我基本上用self.files.remove()
清除它然后如果我用'clearUploads'函数清除它然后更长的工作但如果我用'removeFileItem清除它然后一切都好。
答案 0 :(得分:1)
我认为就是这条线:
self.upload = false;
上面第一个代码段中按钮上的点击处理程序绑定到upload
,似乎您将其设置为false
,这将覆盖处理它的任何函数,因此当您单击按钮时它不再有效。
应该是
self.uploaded = false;
匹配if
中的初始clearUploads
语句?