我需要显示/隐藏按钮,具体取决于:
我对这两个条件有canSave
函数。
我的viewModel:
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
&amp; 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
的末尾设置括号。
这样做的好处是当在另一个(durandal)页面上导航时,如果目标页面没有canUpdate
功能,它将不会“深入到我的html”并且不会出现错误目标页面上不存在的表达式!router.activeItem().canSave()
。
答案 0 :(得分:2)
在表达式中使用时,您应该解包计算canSave
:
<a data-bind="visible: !router.activeItem().canSave(),
click: router.activeItem().deleteDocuments">
Remove
</a>