【发布时间】:2015-01-25 02:57:30
【问题描述】:
我有一个带有简单逻辑的绑定处理程序,我将在其中更新可观察对象,以便它会在视图中更新自身。
这是一个示例,一切都按预期工作
我的观点:
<input data-bind="value: name" />
<hr/>
<div data-bind="fadeInText: name"></div>
代码:
ko.bindingHandlers.fadeInText = {
update: function(element, valueAccessor) {
ko.bindingHandlers.text.update(element,valueAccessor);//text becoz its binded to div
}
};
我正在尝试做这样的事情(如下),我被困在这里updating a observable
我的看法:
<input data-bind="value: name" />
<hr/>
<input type="text" data-bind="fadeInText: name" />
<div data-bind="text:ko.toJSON($data)"></div>
代码:
ko.bindingHandlers.fadeInText = {
update: function(element, valueAccessor) {
var value = valueAccessor();
ko.bindingHandlers.value.update(element,valueAccessor);
$(element).change(function () {
value($(element).fadeInText('get'));
});
}
};
在这个给定的场景中,当我更新 textbox-1 中的值时,有两个文本框,然后 textbox-2 的值正在更新。
但是当我尝试更新 textbox-2 的值时,什么都没有更新,我感觉如此接近,但现在我无法解决这个问题。
检查了 chrome 控制台,我看到了 Uncaught TypeError: undefined is not a function,但 fadeInText 存在于绑定中
更新:
我试过allBindingsAccessor().fadeInText() 每次都得到旧值而不是新输入的值。
提琴手提供here
有一些相同的方法完成但它的工作fiddler here。
对此的任何帮助都很棒。
【问题讨论】:
-
您是否尝试过使用
value(element.value);更新可观察对象?见jsfiddle.net/SmkpZ/469 -
yeah看起来这就是我在这里缺少的部分haim770。我试过 element.val() , $(element).val() 但你是怎么想出 element.value 的?任何地方都有记录。 -
由于
element参数是被传递的原生HTMLInputElement(developer.mozilla.org/en/docs/Web/API/HTMLInputElement),它提供了value属性。然而,您必须意识到,每次可观察到的更改时,您都在重新绑定change事件,这将导致对处理程序进行多次评估。您最好将change绑定移动到绑定处理程序init函数。 -
另外,
value(this.value);也可以工作(因为 jQuery 自动将元素应用为回调的函数上下文)。
标签: knockout.js