そのため、ユーザーに表示する必要のあるスケジュールのリストを用意し、ユーザーが現在どのスケジュールを使用しているかを示し、そのスケジュールにジャンプしたり、スケジュールから外れたりできるようにします。
私のビューモデルは次のようになります
self = this;
self.shifts = ko.observableArray();
self.selectedShifts = ko.observableArray();
//I populate self.shifts here with a WEB API call
//Run through each shift and check if current user is on it and set checked / not checked value for checkbox
ko.utils.arrayForEach(self.shifts(), function(shift) {
//Clear array
self.usersOnShift([]);
//Populate array with all users on the shift
self.usersOnShift = ko.observableArray(WEB API CALL HERE);
var userInShift = ko.utils.arrayFirst(self.usersOnShift(), function(user) {
if (selectedUserId == user.ID) {
return true;
}
});
if (userInShift) {
self.selectedShifts.push(shift.ID);
}
});
ko.applyBindings(self);
私のHTMLは次のようになります
<div class="simple_overlay" id="shiftOverlay">
<div class="details">
<div data-bind="foreach: shifts">
<div><span class="staff-initials" data-bind="text:wardName"> </span><input type="checkbox" data-bind="value: ID, checked: $root.selectedShifts"/> </div>
</div>
<div>
<a href="#" data-bind="click: updateUserOnShifts">Connect</a>
<a href="#" data-bind="click: closeShiftDialog">Close</a>
</div>
</div>
</div>
チェックボックスの値が対応するシフトのIDに正しく設定されていることがわかります。ただし、問題のユーザーがオンになっていることがわかっているシフトはチェックされておらず、selectedShiftsobservableArrayに値が含まれていることがわかります。
どういうわけか、「checked:$ root.selectedShifts」呼び出し/チェックは機能していませんが、正しい値が含まれていることはわかっています。私は何が間違っているのですか?