将信息从多个复选框发送到阵列Knockout js

时间:2016-06-02 08:19:30

标签: knockout.js

我有一个viewmodel,其中包含我使用foreach在网站上显示的信息。 这是它的外观。 enter image description here  当人们点击其中两个复选框时,observable变为true,并且我有一个按钮,表示应用,当单击该按钮时,我想要做的是获取两行的整个viewmodel数组,这些行被检查或者可能检查1行并将它们放入一个数组中。所以我可以把它发送到数据库。

所以基本上我在这里有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>

应用

这是Knockout 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)的数组并将它们放入一个完整的数组中。

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来查看已检查的行信息以及如何只获取CHECKED的某些行。 self.invoicedata()是将所有数组存储在表格中显示的起始数据。

1 个答案:

答案 0 :(得分:1)

得了!你试图绕过错误的一个。 self.invoicedatasintable observable拥有您的所有数据

<强>视图模型:

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());
}

复选框选中属性可确保何时checked/unChecked绑定到它的可观察对象被修改。

示例here