繁体   English   中英

如何在knockoutjs上触发click事件的自定义绑定?

[英]How do I trigger custom binding on click event on knockoutjs?

我正在尝试使用customBindings,但我不知道如何实现这一点。 我听说人们说不应该在ViewModel中混合使用DOM操作,这就是我试图创建CustomBindings的原因。

这是Jsfiddle http://jsfiddle.net/Y3M6n/2/

这是我的HTML

<script src="http://code.jquery.com/jquery-1.10.1.min.js"></script>
<div id="div1" class="row">
    Name <input type="text" data-bind="value: name" />
    Surname <input type="text" data-bind="value: surname" />
</div>

<br/>

<div id="div2" class="row">
     Name: <span data-bind="text:name"> 
     Surname: <span data-bind="text:surname"> 
</div>

<button data-bind="click: submit" >Click</button>

这是我的js代码。

function Ctrl() {
    var self = this;
    self.name = ko.observable();
    self.surname = ko.observable();
    self.submit = function() {
        alert('How do I swap the two divs here');
    }
}

ko.applyBindings(new Ctrl());

ko.bindingHandlers.swapDiv = {
    init: function(element, valueAccessor, allBindings, viewModel, bindingContext) {
        var div1 = $('#div1').html();
        var div2 = $('#div2').html();

        $('#div1').replaceWith(div2);
        $('#div2').replaceWith(div1);
     }
};

我的意图是第一个div显示输入,在用户点击按钮后,它应该显示确认div(第二个div,它将被隐藏和显示)。 如果它通过了验证,那么只需在输入(div1)顶部确认div(div2),这样用户就可以立即输入新信息。 保持流程顺畅是业务需求。

不确定您的意图,但如果您不关注标记而是关注视图模型会怎样。 例如,在视图模型中定义字段并交换值,而不是实际标记。 如下: http//jsfiddle.net/tabalinas/Y3M6n/1/

<div id="div1" class="row" data-bind="text: text1">
</div>

<br/>

<div id="div2" class="row" data-bind="text: text2">
</div>

var vm = {
        text1: ko.observable("Div 1"),
        text2: ko.observable("Div 2"),
        submit: function() {
            var temp = vm.text1();
            vm.text1(vm.text2());
            vm.text2(temp);
        }
    };

我怀疑自定义绑定应该用于此目的。 它通常用于创建一些可重用的组件或特定事件。

如果我错了,请澄清你的意图,我会尽力帮助你。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM