用相似的逻辑组合2个Knockout指令
Combine 2 Knockout directives with similar logic
我有一个"取消"按钮。点击它,我应该显示确认对话框,询问用户是否真的想要丢失填写的数据(如果他做了一些更改),只是隐藏表单,以防他没有做更改。
我有变量canSave
,这有助于检测是否有一些变化的形式。
cancel
-方法,仅清除所有数据并隐藏表单。
这是我尝试过的,但是没有任何效果。
<button data-bind="click: canSave ? function(){openConfirmation(!openConfirmation());} : cancel" type="reset" class="btn btn-default">Cancel</button>
初始代码:
<button data-bind="toggleClick: openConfirmation" type="reset" class="btn btn-default">Cancel</button>
toggleClick
是一个自定义指令来改变一些布尔变量的开关。
<!-- ko if: canSave -->
<confirmation-modal class="delete-confirm-popup" params="showDialog : openConfirmation, bodyHtml: 'Your changes will not be saved.<br/> Do you want to continue?', confirmCallBack: cancel"></confirmation-modal>
<!-- /ko -->
我已经在保存中显示了一些更改的确认…但是这里我忽略了大小写,当没有更改,用户点击取消按钮(在我的情况下什么都没有发生)。
那么我如何结合两个指令- click
(没有变化的情况下)和toggleClick
(当有一些变化的情况下)?
谢谢。
你可以简单地为click event设置一个函数,然后在函数内部比较是否需要进行更改。
下面是一个简单的例子:https://jsfiddle.net/kyr6w2x3/110/
HTML:<form data-bind="visible:ShowForm">
<input type="text" data-bind="textInput:Input">
<input type="button" value="Cancel" data-bind="click:CancelForm">
</form>
<div data-bind="text:Status">
</div>
JS:
var MainViewModel = function() {
var self = this;
self.Input = ko.observable();
self.Status = ko.observable();
self.ShowForm = ko.observable(true);
self.canSave = ko.observable(false);
self.Input.subscribe(function(newValue){
if(newValue){
self.canSave(true);
}
})
self.CancelForm = function(){
if(self.canSave()){
self.Status("there is a change that needs to be asked the user");
}else{
self.ShowForm(false);
self.Status("there is no change so the form got hidden")
}
}
};
ko.applyBindings(new MainViewModel ());
相关文章:
- 为knockout.js数据绑定加载多个远程数据源
- Knockout.js多个外部模板&多VM切换失败
- knockout.jsforeach,用2n个深度数组构建listview
- Knockout.js-更新父视图模型中的数组,在第二个视图模型中使用值
- Knockout.js多个可观察数组不工作
- 使用类与 ids 用于多个 li 元素示例 20,具有 KNOCKOUT 和 jQuery,性能和可保留性更好
- Knockout中的CSS绑定,用于绑定两个类,其中一个是动态的,另一个是静态的并经过评估的
- Knockout-通过多个对象属性过滤可观测阵列中的对象
- Knockout js-如何在两个javascript文件之间传递值
- Knockout为15个项目的数组生成3个部分,每个部分生成5篇文章
- Knockout js-双向绑定多个输入(硬编码的HTML输入文本框)并获得JSON数组
- 如何拥有一个可观察的集合,该集合可以从两个源进行更新,而不会在knockout.js中引起循环
- Knockout:使用多个键进行映射
- 如何对ViewModel的多个元素进行排序-Knockout
- Knockout JS模式用于同一页面中的多个视图模型,维护DOM结构
- 我可以使用Knockout将绑定应用到多个DOM元素吗?
- 在knockout js中如何在两个视图模型之间交换值
- 用相似的逻辑组合2个Knockout指令
- 多个Knockout模型绑定在一个DOM树中
- 将多个knockout视图模型脚本绑定到一个视图