在使用挖空自定义绑定时更新模型时更新元素
updating element back when model updates while using knockout custom binding
我正在做一个带有 KNOCKOUT 的 jQuery 自动完成.js的练习。我正在尝试构建的应用程序是一个简单的待办事项列表。我的任务对象具有 desc
、 name
和 id
等属性。它有一个方法setUser()
设置任务的名称和id(基本上是将任务分配给某人。
我以这种方式编写了自定义绑定:
ko.bindingHandlers.autocomplete = {
init: function (el, valueAccessor) {
var va = valueAccessor();
var lbl = va.label;
var val = va.value;
$(el).autocomplete({
source: src,
select: function (evt, ui) {
evt.preventDefault();
lbl(ui.item.label);
val(ui.item.value);
$(el).val(ui.item.label);
}
});
}
};
data-bind
语法编写如下:
<input type="text" data-bind="autocomplete : {label: name, value: id}"/>
所有这些都可以很好地连接自动完成功能。但是,以更改模型中的某些内容为例,您自然希望关联的文本框反映更新的结果。
此处的简单解决方案是添加值绑定:
<input type="text"
data-bind="autocomplete : {label: name, value: id}, value: name"/>
但是,如果没有value
绑定,您如何做到这一点?!
JSBIN链接:http://jsbin.com/InUHIwE/3/
您只需要订阅所需的可观察量。
因此,我将重写自定义绑定,如下所示:
ko.bindingHandlers.autocomplete = {
init: function (el, valueAccessor) {
console.log('init');
var va = valueAccessor();
var lbl = va.label;
var val = va.value;
lbl.subscribe(function (v) {
$(el).val(v);
});
console.log('valueaccessor:', va);
$(el).autocomplete({
source: src,
select: function (evt, ui) {
evt.preventDefault();
lbl(ui.item.label);
val(ui.item.value);
$(el).val(ui.item.label);
}
});
}
};
JSBIN链接:http://jsbin.com/InUHIwE/4/
相关文章:
- Javascript循环不会自我更新
- 添加文字和评论功能更新Div
- AngularJS:ng之后,重复$scope值未按预期更新
- 如何通过数组更新角度子范围
- Ajax聊天消息重复而不仅仅是更新
- 通过CSV文件上载更新数据库表
- 平均值:无法将数据更新到数据库
- $rootScope未使用forEach进行更新
- d3基于用户选择动态更新节点
- 有条件更新d3.js力图中节点的最佳方法
- Angular:更新一次性绑定的数据
- Javascript更新孙窗口中的表单元素
- 使用AngularJS中的筛选器更新给定的表
- 绑定时将Parsley minlength消息作为选项传递时,未对其进行自定义
- 强制定时更新 CSS 文件
- 在使用挖空自定义绑定时更新模型时更新元素
- KO ObservableArray 更新在与 .sort 绑定时中断
- Javascript 更新未发布,属性在绑定时具有默认值
- Ajax定时更新问题
- 从$on调用数据绑定时不更新