Ich habe ein Viewmodel, die Informationen, die ich auf der Website mit foreach zeigt. So sieht es aus. Wenn die Person die Kontrollkästchen anklickt, vielleicht 2, wird das Observable wahr, und ich habe eine Schaltfläche, die apply sagt und wenn diese Schaltfläche angeklickt wird, was ich tun möchte, ist das gesamte viewmodel Array für die zwei Zeilen überprüft oder vielleicht 1 Zeile, die überprüft und in ein Array gesetzt wird. damit ich es an die Datenbank senden kann.senden Informationen von mehreren Kontrollkästchen zu Array Knockout js
Also im Grunde habe ich das HTML hier.
<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>
Nehmen und hier ist die Datei js Knockout.
/* 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;
}
}
};
Und hier ist die Tastenfunktion, die das Ansichtsmodell überprüfen muss und die Arrays erhalten, die den geprüfte Wert (true) und in ONE ganze Reihe setzt sich hat.
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());
}
Also das Problem ist, ich bin nicht sicher, wie die invoiceViewModel rufen die geprüfte Zeileninformationen und auch, wie man nur die bestimmten Zeilen zu sehen, die aktiviert ist. Die self.invoicedata() ist diejenige, in der das gesamte Array im Start gespeichert ist, das auf dem Tisch angezeigt wird.
ich Ihren Code verwendet, aber ich bekomme ein leeres Array, aber wenn ich es zeigt mir nur console.log (Artikel) schreiben 3 Arrays –
oops mein schlechtes!. jetzt aktualisiert @MasnadNihit 'item.checkedInvoice1' ist beobachtbar, also lies seinen Wert mit'() '. Prost –
hey! Ich habe das genaue Ding gemacht, Problem ist, dass, wenn ich den geprüften Wert anklicke, der beobachtbare Wert noch derselbe ist, der 0 ist. Er ändert sich nicht zu 1, also dachte ich, sollte ich ihn gewaltsam auf 1 ändern? –