次のいずれかに応じて、ボタンを表示/非表示にする必要があります。
- (1) 保留中の変更がいくつかあります
- (2) すでにセーブ中
私はcanSaveこれら2つの条件に対応しています。
私のビューモデル:
var canSave = ko.computed(function () {
return hasChanges() && !isSaving();
});
canSave以下は、この関数を使用する htmlです。
Removeそうでない場合にのみボタンを表示するcanSaveSave場合にのみボタンを表示するcanSaveCancel場合にのみボタンを表示する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()に存在しない式でエラーが発生しないことです。対象ページ。