0

次のいずれかに応じて、ボタンを表示/非表示にする必要があります。

  • (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()に存在しない式でエラーが発生しないことです。対象ページ。

4

1 に答える 1