gpt4 book ai didi

javascript - 如何在knockoutjs上的点击事件上触发自定义绑定(bind)?

转载 作者:行者123 更新时间:2023-12-02 17:46:54 24 4
gpt4 key购买 nike

我正在尝试使用customBindings,但我不知道如何实现这一点。我听到人们说 DOM 操作不应该混合在 ViewModel 中,所以这就是我尝试创建 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),以便用户可以立即输入新信息。保持流程顺畅是业务需求。

最佳答案

不确定您的意图,但是如果您不关注标记而是关注 View 模型怎么办?例如,在 View 模型中定义字段并交换值,而不是实际标记。像下面这样: 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);
}
};

我怀疑是否应该使用自定义绑定(bind)来实现此目的。它通常用于创建一些可重用的组件或特定事件。

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

关于javascript - 如何在knockoutjs上的点击事件上触发自定义绑定(bind)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21663536/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com