次のいずれかに応じて、ボタンを表示/非表示にする必要があります。
- (1) 保留中の変更がいくつかあります
- (2) すでにセーブ中
私はcanSave
これら2つの条件に対応しています。
私のビューモデル:
var canSave = ko.computed(function () {
return hasChanges() && !isSaving();
});
canSave
以下は、この関数を使用する htmlです。
Remove
そうでない場合にのみボタンを表示するcanSave
Save
場合にのみボタンを表示するcanSave
Cancel
場合にのみボタンを表示するcanSave
私のHTML:
<a data-bind="visible: !router.activeItem().canSave,
click: router.activeItem().deleteDocuments">
Remove
</a>
<a data-bind="visible: router.activeItem().canSave,
click: router.activeItem().save">
Save
</a>
<a data-bind="visible: router.activeItem().canSave,
click: router.activeItem().cancel">
Cancel
</a>
Save
&Cancel
ボタンではうまく機能しますが、ボタンでは機能しません。ボタンは表示されません。関数の前に問題があるようです。Remove
!
canSave
PS:Remove
保留中の変更がなく、保存が進行中でない場合にのみ、ボタンを表示する必要があります。だから電話する必要がある!router.activeItem().canSave
アップデート
ko if
最後に、html リンクを次のような条件で囲むことで機能するようになりました。
<!-- ko if: router.activeItem().canUpdate -->
<a data-bind="visible: !router.activeItem().canSave(),
click: router.activeItem().deleteDocuments">
Remove
</a>
<a data-bind="visible: router.activeItem().canSave(),
click: router.activeItem().save">
Save
</a>
<a data-bind="visible: router.activeItem().canSave(),
click: router.activeItem().cancel">
Cancel
</a>
<!-- /ko -->
の最後に括弧を設定しないことに注意してくださいko if: router.activeItem().canUpdate
。
これの利点は、ターゲットページに機能がない場合に別の(デュランダル)ページに移動するときに、canUpdate
「HTMLのより深いところに移動」せず、式!router.activeItem().canSave()
に存在しない式でエラーが発生しないことです。対象ページ。