2016-06-02 7 views
0

私はforeachを使用してサイトに表示されている情報を持っているviewmodelを持っています。 これは見た目です。 enter image description here 人が2つのチェックボックスをクリックすると、observableがtrueになり、applyというボタンがあり、そのボタンがクリックされたときに2つの行のviewmodel配列全体が取得されますチェックされているか、またはチェックされている1行を1つの配列に入れます。私はそれをデータベースに送ることができます。複数のチェックボックスから配列ノックアウトjsに情報を送信

基本的に私はここにHTMLを持っています。

<tbody data-bind="foreach: investmentinvoicedatasintable"> 
    <tr> 
     <td class="text-center"><span data-bind="text: $data.invoiced_total"></span></td> 
     <td class="text-center"><span data-bind="text: $data.paid_total "></span></td> 
     <td class="text-center"> 
     <a href="#" data-bind="if: $data.status == 10, click: $root.getRepaymentInvoice"><?php echo lang("invoice_table_pay1"); ?></a> 
     <span data-bind="ifnot: $data.status == 10"><?php echo lang("invoice_table_pay1"); ?></span> 
     </td> 
     <td class="text-center"><div data-bind="if: $data.status == 10" ><input type="checkbox" data-bind="checked: $data.checkedInvoice1"/></div> 
      <div data-bind="ifnot: $data.status == 10" ></div> 
     </td> 
    </tr> 
</tbody> 

を適用し、ここでノックアウトのjsファイルです。

/* Vew model for invoices data */ 
self.invoicedatasintable = ko.observableArray(); 
     function InvoiceViewModel(root /* root not needed */, invoice) { 
      var self = this; 
      self.ID = invoice.ID; 
      self.type_related_amount = invoice.type_related_amount; 
      self.type_related_paid = invoice.type_related_paid; 
      self.ORIG_ID = invoice.ORIG_ID; 
      self.Fullname = invoice.Fullname; 
      self.status_description = invoice.status_description; 
      self.type_txt = invoice.type_txt; 

      self.checkedInvoice1 = ko.observable(0); 

      self.getCheckedInvoiceInfo = function(checkedinvoice){ 
      if(checkedInvoice1){ 
       return checkedinvoice; 
      }else{ 
       return 0; 
      } 
     } 
     }; 

そして、ここでのviewmodelをチェックし、チェック値(true)を持つ配列を取得し、ONE配列全体にそれらを配置する必要がボタンの機能です。

self.getCheckedInvoices = function(){ 
     self.arr = ko.observableArray(); 
     $.each(self.getCheckedInvoiceInfo(), function (index, item) { 
       if(item.checkedInvoice1 == 0){ 
        return false; 
       }else{ 
        self.arr.push(/*only the array which has checked 1 */); 
       } 

      }); 
      console.log(self.arr()); 
    } 

だから、問題は私がチェックしている特定の行だけを取得する方法もチェック行情報を参照してしinvoiceViewModelを呼び出す方法を確認していないです。 self.invoicedata()は、テーブルに表示されている開始点に格納されているすべての配列を持つ配列です。

答えて

1

Gotcha!あなたは間違ったものをループさせようとしています。それが修正されますにchecked/unChecked、観察がバインドさとき

self.arr = ko.observableArray(); 
self.getCheckedInvoices = function() { 
    ko.utils.arrayForEach(self.invoicedatasintable(),function(item){ //use ko.utils foreach 
    if (item.checkedInvoice1()) { //it's a Boolean flag 
     self.arr.push(item); 
    } 
    }); 
    console.log(self.arr()); 
} 

チェックボックスにチェックプロパティを確認します:観察可能なself.invoicedatasintable

はViewModelにすべてのデータ

を持っています。

サンプルhere

+0

私はあなたのコードを使用しますが、私は空の配列を取得しますが、私はちょうどにconsole.log(アイテム)を書くとき、それは私の3つの配列を示し –

+0

おっと、私の悪いです!。 @MasnadNihit 'item.checkedInvoice1'は観測可能ですので、その値を'() 'で読み込みます。歓声 –

+0

ねえ!私は正確なことをしました、問題は私がチェックしたときに観察可能な値が0であることと同じです..それは1に変わらないので、私は強制的に1に変えるべきですか? –

関連する問題