0
コンテキスト:私はチェックリストを持つテーブルを持っています。各チェックにはチェックボックスがあり、テーブル自体には上部に「すべて選択」チェックボックスがあります。チェックボックスの目的は、小切手を印刷することです。Typescriptを使用したノックアウトチェックボックス
私は現在、select allチェックボックスを有効にしています。すべてのチェックをselectedChecks ko.observable配列に加え、checkIDsをCheckIDs配列に追加します。サーバーのprint関数は、checkIDのリストを使用します。
個別のチェック/チェックIDの追加と削除が問題です。チェック/チェックIDが既にアレイにあるかどうかを判断する方法がわかりません。
免責事項:私はすべての配列をどのように設定したのか考えているかもしれません。
ご協力いただきありがとうございます。
ビュー:
<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>
活字体:
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);
});
同様の構造を反映するようにコードを更新しましたが、vendorChecksオブジェクトがすべてをサポートしていないことがわかりました。私はTypescriptを使用しています。それが違いを生むかどうかは分かりません。 – Crumblenautjs
Typescriptでは、 'Array.prototype.every'があまりにも新しいかもしれません。わからない..ここにpolyfillとサポートテーブルがあります:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/every#Polyfill – user3297291
私は実際にはあなたが提供した提案ですので、私はそれを回答としてマークします。ありがとうございました – Crumblenautjs