2015-10-22 3 views
0

У меня есть событие нокаута, связанное с кнопкой:события не работает после очистки наблюдаемого массива

<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()">&times;</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» больше не работает. Как вы можете сказать выше, я пытаюсь очистить массив различными способами, и это не изменило ситуацию. Даже если есть только 1 элемент для очистки, и я по существу очищаю его так же, как и с self.files.remove(), тогда, если я очищу его с помощью функции clearUploads, то еще будет работать, но если я очищу его с помощью 'removeFileItem, тогда все будет в порядке.

ответ

1

Я думаю, что эта линия:

self.upload = false; 

Ваш нажмите обработчик на кнопку в первом фрагменте кода выше, связанной с upload, кажется, что вы установите его в false, который будет перезаписать любой функции его обработки, поэтому, когда вы нажимаете кнопку, она больше не работает.

Должна ли она быть

self.uploaded = false; 

, чтобы соответствовать начальным if заявление в clearUploads?

+0

Большое спасибо. Ты прав. Я топал на своем собственном мероприятии. Я предполагаю, что это моя ошибка в том, что вы назвали переменную так близко к названию события. Я думаю, мне нужно переименовать его. – coding4fun

Смежные вопросы