だから私はこのようなviewModelを持っています
self.zones = ko.observableArray(zones);
ko.utils.arrayForEach(self.zones(), function (zone) {
//Get all rooms for the zone
zone.rooms = getChildren("Organization", "Organization", zone.ID);
if (zone.rooms.length > 0) {
zone.buttons = ko.observableArray([]);
//For each Room in Zone find the Buttons and add them to the Zone.buttons ObservableArray
ko.utils.arrayForEach(zone.rooms, function (room) {
room.buttons = getChildren("Organization", "ButtonAssign", room.ID, { scheduleID: self.scheduleID });
ko.utils.arrayForEach(room.buttons, function (button) {
zone.buttons.push(button);
});
});
}
ゾーンには、Observable 配列である buttons というプロパティがあることがわかります
私の見解では、各ゾーンをループしてボタンを出力しますが、私のゾーンの 1 つにはボタンが含まれておらず、この例外がスローされます。
エラー: バインディングを解析できません。メッセージ: ReferenceError: ボタンが定義されていません。バインディング値: foreach:buttons
<table>
<tbody>
<tr data-bind="foreach: zones" style="vertical-align: top;">
<div class="zoneDiv">
<span data-bind="text: Name"></span>
<div data-bind="foreach:buttons" class="buttonsList">
<div class="buttonField">
<div data-bind="text: Name" style="float: left; width: 140px;">
</div>
</div>
<input type="hidden" data-bind="value: ID" />
</div>
</div>
</td>
</tr>
</tbody>
</table>
私の質問は次のとおりです。ループを開始する前に、監視可能な配列の null 値をどのようにチェックしますか?
さらに、button.Name などの単一のプロパティで null 値をチェックして、ボタンに名前がある場合は div に書き込み、ない場合は何も書き出さないようにします (またはデフォルトのテキスト)。
したがって、基本的にはビュー内のビューモデル プロパティを null チェックするため、この例外は発生しません。
ありがとう