我怎么听在这个自定义bindingHandler数据的变化?

我有一个自定义bindingHandler被点击时效果很好。 它成功地改变了数据点..但是当其他UI控件更改数据它不是被更新

我的HTML看起来像这样

<input type="checkbox" data-bind="checked: publisher.my_check"> Checkbox <div data-bind="slidebox: {label_on: 'ON', label_off: 'OFF', data: publisher.my_check }"></div>

我bindingHandler看起来像这样

ko.bindingHandlers.slidebox = { init: function(element, valueAccessor, allBindingsAccessor, viewModel) { var el = $(element), obj = valueAccessor(); //add additional markup el.append($('<div>')); //set initial label el.find('div').text(el.hasClass('checked') ? obj.label_on : obj.label_off); //update the data point obj.data(el.hasClass('checked')); var updateHandler = function() { console.log('i got clicked'); var el = $(element), obj = valueAccessor(); el.toggleClass('checked').find('div').text(el.hasClass('checked') ? obj.label_on : obj.label_off); obj.data(el.hasClass('checked')); }; ko.utils.registerEventHandler(element, "click", updateHandler); }, 'update': function (element, valueAccessor) { console.log('i got updated'); } };

点击div时它改变了数据点和更新复选框预期..但点击复选框的时候,我没有看到'我得到了更新的“控制台消息

--------------解决方案-------------

您需要实施的更新功能。 这被当在数据绑定属性的任何可观察到其绑定到更新调用。 在这种情况下publisher.my_check

ko.bindingHandlers.slidebox = {
init: function(element, valueAccessor, allBindingsAccessor, viewModel) {
...
},
'update': function (element, valueAccessor) {
var config = valueAccessor(),
checked = ko.utils.unwrapObservable(config.data),
$element = $(element).toggleClass('checked', checked);

$element.find('div').text(checked ? config.label_on : config .label_off);
}
};

编辑

下面是与工作代码提琴http://jsfiddle.net/madcapnmckay/xrBSQ/

希望这可以帮助。

分类:JavaScript的 时间:2012-05-02 人气:0
本文关键词: JavaScript中,knockout.js
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.649 (s). 9 q(s)