2014-01-16 2 views
0

В моей модели модели у меня есть несколько методов, которые возвращают данные в наблюдаемом массиве. Все работает нормально, когда я нажимаю кнопку, которая вызывает метод newGame. Однако во второй раз, когда я нажимаю кнопку, я получаю ошибку javascript.Нокаут JS removeAll() не работает во второй раз, когда он называется

self.newGame = function() { 
     // reset the zones 
     self.resetBoardState(); 

     // more stuff here but clipped for brevity ... 
    } 

    self.resetBoardState = function() { 
     // clear all zones... 
     self.library.removeAll(); 

     // place all cards in deck into library ... 
     self.library = JSON.parse(JSON.stringify(self.deck)); 
    } 

Ошибка я получаю в консоли JavaScript является:

Uncaught TypeError: Object [object Array] has no method 'removeAll' 

У меня есть JS Fiddle вот так весь вид модели можно увидеть. Если вы нажмете кнопку «Новая игра» в первый раз, все будет работать отлично. Вы также можете нажать кнопку «Рисовать карту», ​​и она также будет вести себя правильно. Однако нажатие кнопки «Mulligan» вызывает ту же ошибку, что и нажатие кнопки «Новая игра».

Что я могу сделать для этого?

ответ

2

self.library Первоначально наблюдаемый массив, но ваш сброс превращает его в простой массив. Вместо этого просто установите значение существующего наблюдаемого.

заменить строку

self.library = JSON.parse(JSON.stringify(self.deck));

с

self.library(JSON.parse(JSON.stringify(self.deck)));

+0

Спасибо. Теперь кажется очевидным, что вы это указали. –

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