2013-02-22 113 views
0

我有一個頁面我將一個viewmodel綁定到一個jQuery UI對話框中的HTML表格。Knockout removeAll()not recognized

當用戶關閉對話框時,我想要移除viewmodel裏面的所有元素,綁定到HTML表格中observableArray。我正在使用removeAll()方法,但是我的螢火蟲告訴我,這不是一個功能。

你能幫我嗎?

這是一個簡化的方案。

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 2013-02-22 11:19:24

+0

當你調試它時,這個.i解析爲什麼?它顯示爲可觀察數組嗎?另外,我不完全明白你爲什麼要調用removeAll;那將從observableArray中移除所有項目,那是你真正想要做什麼的? – 2013-02-22 11:24:41

+0

是的,這正是我想要做的。 RemoveAll observableArray中的元素 – AngeloBad 2013-02-22 11:27:25