Kontext: Ich habe eine Tabelle mit einer Liste von Schecks. Jede Überprüfung hat ein Kontrollkästchen, und die Tabelle selbst hat oben das Kontrollkästchen "Alle auswählen". Der Zweck der Kontrollkästchen besteht darin, die Schecks auszudrucken.Knockout Checkboxen mit Typoskript
Ich habe derzeit das Kontrollkästchen alle Kontrollkästchen aktivieren - es fügt alle Checks zu einem kouncebackable-Array von choosedChecks sowie die checkIDs zu einem CheckIDs-Array hinzu. Die Druckfunktion des Servers verwendet eine Liste von checkIDs.
Das Problem, das ich habe, ist mit dem Hinzufügen und Entfernen von einzelnen Prüfungen/checkIDs. Ich bin nicht sicher, wie Sie feststellen, ob die Check/checkID bereits im Array ist, und wenn ja, wie Sie es entfernen. Hier ist der Code, mit den Ansichten usw.
Haftungsausschluss: Ich könnte darüber nachdenken, wie ich alle meine Arrays eingerichtet habe.
Vielen Dank für Ihre Hilfe.
The View:
<table class="details_table" data-bind="visible: vendorChecks().length">
<thead>
<tr>
<th>Check ID
</th>
<th>Check Date
</th>
<th>Vendor Name
</th>
<th>Check Amount
</th>
<th>Approve Status
</th>
<th>
<input type="checkbox" data-bind="checked: selectAllChecks" title="Select all/none"/>
</th>
</tr>
</thead>
<tbody class="nohighlight" data-bind="foreach: $root.vendorChecks">
<tr>
<td><span data-bind="text: $data.CheckID"></span></td>
<td><span data-bind="text: CheckDate"></span></td>
<td><span data-bind="text: VendorName"></span></td>
<td><span data-bind="text: FormatCurrency(CheckAmount())"></span></td>
<td><span data-bind="text: Globalize.formatCheckRunApproveStatus(ApprovalStatusID())"></span></td>
<td>
<input type="checkbox" class="print_line_checkbox" data-bind="checkedValue: $data, checked: $root.chosenChecks(), click: $root.addCheck"/>
</td>
</tr>
</tbody>
</table>
Typoskript:
class SearchPrintedChecksModel {
public checkRuns = ko.observableArray<CheckRunModel>(null);
public bankDrafts = ko.observableArray<BankDraftInfoModel>(null);
public vendorChecks = ko.observableArray<BankDraftInfo>(null);
public isSelectedCheck = ko.observable(false);
public chosenChecks = ko.observableArray<BankDraftInfo>(null);
public checkIDs = ko.observableArray();
public addCheck(checkIDs) {
var checks = printModel.chosenChecks();
const CheckIDs = checkIDs;
for (var i in checks) {
checkIDs.push(checks[i].CheckID);
???
}
}
public selectAllChecks = ko.pureComputed({
read: function() {
return this.chosenChecks().length === this.vendorChecks().length;
},
write: function(value) {
this.chosenChecks(value ? this.vendorChecks.slice(0) : []);
const checks = printModel.chosenChecks();
const checkIDs = printModel.checkIDs();
for (let i in checks) {
if (checks.hasOwnProperty(i)) {
printModel.checkIDs.push(checks[i].CheckID);
}
}
this.addCheck(checkIDs);
},
owner: this
});
}
$(document).ready(() => {
ko.applyBindings(printModel);
});
Ich habe meinen Code aktualisiert, um eine ähnliche Struktur wiederzugeben, aber es sagt mir, dass VendorChecks Objekt nicht alle unterstützt. Ich verwende Typoskript. Nicht sicher, ob das "einen Unterschied macht. – Crumblenautjs
'Array.prototype.every' ist möglicherweise zu" neu "für Typescript. Nicht sicher .. Hier ist die Polyfill und Support-Tabelle: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/every#Polyfill – user3297291
Ich habe es tatsächlich herausgefunden basierend auf der Vorschlag, den Sie mir gegeben haben, also werde ich es als beantwortet markieren. Vielen Dank – Crumblenautjs