我有一个viewmodel,其中包含我使用foreach在网站上显示的信息。 这是它的外观。 当人们点击其中两个复选框时,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()是将所有数组存储在表格中显示的起始数据。
答案 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