我需要根据是否显示/隐藏按钮:
- (1) 有一些待定的更改
- (2) 已经有一个正在进行的保存
我有canSave
这两个条件的功能。
我的视图模型:
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
是问题所在。
Remove
PS:只有在没有待处理的更改并且没有正在进行保存时,我才需要显示按钮。这就是为什么我需要打电话!router.activeItem().canSave
更新
最后,我通过用这样的条件包围我的 html 链接来让它工作ko if
:
<!-- 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
.
这样做的好处是在另一个(durandal)页面上导航时,如果目标页面没有该canUpdate
功能,它将不会“深入我的 html”并且不会在!router.activeItem().canSave()
不存在的表达式上出现错误目标页面。