2013-02-22 9 views
0

У меня есть страница Я привязываю viewmodel к таблице HTML внутри диалогового окна JQuery UI.Нокаут removeAll() не распознан

Когда пользователь закрывает диалоговое окно, я хочу удалить весь элемент внутри рамки вида observableArray, связанный с таблицей HTML. Я использую метод removeAll(), но мой firebug сказал мне, что он не распознается как функция.

Вы можете мне помочь?

Это упрощенный сценарий.

HTML

<input type="button" id="open" value="GO!"><br /> 
<div id='hidden'> 
    <table> 
     <tbody data-bind="foreach: i"> 
      <tr> 
       <td><span data-bind="text: code" /></td> 
       <td><span data-bind="text: descr" /></td> 
      </tr> 
     </tbody> 
    </table> 
</div> 

JS

$(function() { 

    function vm() { 
     this.items = [ 
      {code: "2011",descr: "descr 2011"}, 
      {code: "2012",descr: "descr 2012"}, 
      {code: "2013",descr: "descr 2013"} 
     ]; 

     this.i = ko.observableArray(this.items); 

     this.clearFoundEvals = function() 
     { 
      this.i.removeAll(); 
     }; 

     return this; 
    } 

    ko.applyBindings(new vm()); 

    $dialog = $('#hidden').dialog({ 
     autoOpen: false, 
     height: 200, 
     width: 300, 
     buttons: { 
      cancel: function() { 
       vm.clearFoundEvals(); 
       $(this).dialog('close'); 
      } 
      } 
     }); 

     $('#open').click(function(){ 
      $dialog.dialog('open'); 
     });  
    });  

Working example

ответ

2

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

var vm = new vm(); 
ko.applyBindings(vm); 

jsFiddle

+0

Я сделал ошибку в своем коде, но он все еще не работает – AngeloBad

+0

Когда вы его отлаживаете, что это значит. Он отображается как наблюдаемый массив? Кроме того, я не совсем понимаю, почему вы хотите вызвать removeAll; который удалит все элементы из наблюдаемого массива, это то, что вы действительно хотите сделать? –

+0

Да, это именно то, что я хочу сделать. УдалитьВсе элемент в наблюдаемом массиве – AngeloBad

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