gpt4 book ai didi

knockout.js - knockout 自定义绑定(bind)处理程序

转载 作者:行者123 更新时间:2023-12-04 18:12:59 24 4
gpt4 key购买 nike

我无法让它工作:http://jsfiddle.net/2jg2F/1/

我基本上想创建一个链接,当有人单击文本时更改为输入框。我试过 knockout 2.0 和 2.1。

HTML

<div data-bind="clickToEdit : message"> </div>

Javascript
ko.bindingHandlers.clickToEdit = {
init: function(element, valueAccessor) {
var observable = valueAccessor(),
link = document.createElement("a"),
input = document.createElement("input");

element.appendChild(link);
element.appendChild(input);

observable.editing = ko.observable(false);
ko.applyBindingsToNode(link, {
text: observable,
visible: !observable.editing,
click: function() {
observable.editing(true);
}
});

ko.applyBindingsToNode(input, {
value: observable,
visible: observable.editing,
hasfocus: observable.editing
});
}
};

function ViewModel() {
this.message = ko.observable("Click on me to edit");
}
ko.applyBindings(new ViewModel());

最佳答案

您的问题出在这一行:

visible: !observable.editing

这将评估为假,并将保持这种状态。即使你这样做 !observable.editing() ,那么它将是一个静态的真值。

因此,有两种方法可以处理它:

1 - 一个不错的选择是创建一个快速 hidden将相反的值传递给可见绑定(bind)的绑定(bind)处理程序。有几种写法,但这里有一个简单的方法:
ko.bindingHandlers.hidden = {
update: function(element, valueAccessor) {
var isVisible = !ko.utils.unwrapObservable(valueAccessor());
ko.bindingHandlers.visible.update(element, function() { return isVisible; });
}
};

现在,您可以使用:
hidden: observable.editing

这是一个示例: http://jsfiddle.net/rniemeyer/2jg2F/2/

2 - 另一种选择是添加一个返回相反的计算 observable。就像是:
    observable.editing = ko.observable(false);
observable.notEditing = ko.computed(function() {
return !observable.editing();
});

然后,绑定(bind) notEditing喜欢:

http://jsfiddle.net/rniemeyer/2jg2F/3/

关于knockout.js - knockout 自定义绑定(bind)处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12252503/

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