コンテキスト:チェックのリストを含むテーブルがあります。各チェックにはチェックボックスがあり、テーブル自体の上部に「すべて選択」チェックボックスがあります。チェックボックスの目的は、小切手を印刷することです。
現在、[すべて選択]チェックボックスが機能しています。これにより、chooseChecks ko.observable配列にすべてのチェックが追加され、CheckIDs配列にcheckIDが追加されます。サーバーの印刷機能は、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>
Typescript:
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);
});
ロジックでエラーを見つけるのではなく、少し異なる構造を調べることをお勧めします。
checked
各項目にオブザーバブルを入れてください。これをchecked
データバインドで使用します。computed
でaread
とwrite
メソッドを使用してを作成します。
read
関数は、すべての項目がチェックされているかどうかをチェックしますwrite
関数は、に書き込まれた値を渡し、各項目コードは次のようになります。
function ViewModel() {
this.items = [
{ id: 1, checked: ko.observable(false) },
{ id: 2, checked: ko.observable(false) },
{ id: 3, checked: ko.observable(false) },
{ id: 4, checked: ko.observable(false) },
];
this.allChecked = ko.computed({
read: function() {
return this.items.every(function(item) {
return item.checked();
});
},
write: function(value) {
this.items.forEach(function(item) {
item.checked(value);
});
}
}, this);
}
ko.applyBindings(new ViewModel());
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>
<label>
<input type="checkbox" data-bind="checked: allChecked">
all
</label>
<ul data-bind="foreach: items">
<li>
<label>
<input type="checkbox" data-bind="checked: checked"/>
<span data-bind="text: 'Item ' + id"></span>
</label>
</li>
</ul>
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加