1

通知を処理するために他のビューに含めることができる部分ビューを作成しました。

<div id="notifications">
    <!-- ko with: $root.currentNotification -->
    <span data-bind="text: notificationType"></span>
    <span data-bind="text: friendlyMessage"></span>
    <!-- ko if: $root.technicalMessageShown -->
    <span data-bind="text: technicalMessage"></span>
    <!-- /ko -->
    <button data-bind="click: $root.toggleTechnicalMessage, text: $root.technicalMessageButtonText"></button>
    <button data-bind="click: $root.dismissNotification">Dismiss</button>
    <!-- /ko -->

    <pre data-bind="text: ko.toJSON($root, null, 2)"></pre>

</div>

ビューは、親ビューで次のバインディングを使用してビューモデルにバインドされます。

var notificationsViewModel = new NotificationsViewModel();
ko.applyBindings(notificationsViewModel, document.getElementById("notifications"));
var viewModel = new MainViewModel();
ko.applyBindings(viewModel);

レンダリングされると、currentNotificationがビューモデルに存在していても、'ko with:$root.currentNotification'内の要素はDOMに含まれません。

部分ビューの最後の行から表示されたビューモデル:

{
  "allNotifications": [
    {
      "id": "0",
      "notificationType": "Error",
      "friendlyMessage": "Lorem ipsum dolor sit amet.",
      "technicalMessage": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque elit nulla, porta ac condimentum in, condimentum sed dui. Aliquam interdum."
    }
  ],
  "currentNotification": {
    "id": "0",
    "notificationType": "Error",
    "friendlyMessage": "Lorem ipsum dolor sit amet.",
    "technicalMessage": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque elit nulla, porta ac condimentum in, condimentum sed dui. Aliquam interdum."
  },
  "technicalMessageButtonText": "More Info"
}

ノックアウトに現在の通知が表示されない理由はありますか?

4

1 に答える 1

1

両方のバインディングをターゲットにする必要があります。一方のバインディングのみをターゲットにすると、もう一方がそれを上書きします。

于 2013-03-05T01:51:37.913 に答える