Javascript NotifySubscribers未刷新UI(可写计算)
我在自定义绑定中有一个可写的计算程序来格式化一个可观察的。但是,当用户删除格式化的掩码时,读取函数不会触发,因为observable正在删除所有非数字,好吧,它的工作方式应该是这样的,所以我添加了notifySubcribers来调用read everytime,即使observable值没有改变,它也没有工作,但是ui元素没有刷新新值(读取返回) 请遵循以下代码:Javascript NotifySubscribers未刷新UI(可写计算),javascript,knockout.js,Javascript,Knockout.js,我在自定义绑定中有一个可写的计算程序来格式化一个可观察的。但是,当用户删除格式化的掩码时,读取函数不会触发,因为observable正在删除所有非数字,好吧,它的工作方式应该是这样的,所以我添加了notifySubcribers来调用read everytime,即使observable值没有改变,它也没有工作,但是ui元素没有刷新新值(读取返回) 请遵循以下代码: ko.bindingHandlers.conta = { init : function(element, valueAc
ko.bindingHandlers.conta = {
init : function(element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
var observable = valueAccessor(), formatted = ko.computed({
read : function() {
var val = ko.unwrap(valueAccessor());
if (!val) return val;
if (val.toString().length < 6) {
val = zeroPad(val, 6);
observable(val);
}
return val.toString().slice(0, val.toString().length - 1) + "-" + val.toString().slice(val.toString().length - 1);
},
write : function(value) {
if (value) {
value = zeroPad(value, 6);
}
observable(value.replace(/\D/g, ''));
observable.notifySubscribers();
}
});
if ($(element).is('input')) {
ko.applyBindingsToNode(element, {
numbersOnly : true,
maxLength : 10,
value : formatted
});
} else {
ko.applyBindingsToNode(element, {
numbersOnly : true,
text : formatted
});
}
return {
controlsDescendantBindings : true
};
}
};
ko.bindingHandlers.conta={
init:function(元素、valueAccessor、allBindingsAccessor、viewModel、bindingContext){
var observable=valueAccessor(),格式化=ko.computed({
读:函数(){
var val=ko.unwrap(valueAccessor());
如果(!val)返回val;
如果(val.toString().length<6){
val=zeroPad(val,6);
可观察(val);
}
返回val.toString().slice(0,val.toString().length-1)+“-”+val.toString().slice(val.toString().length-1);
},
写入:函数(值){
如果(值){
值=zeroPad(值6);
}
可观察(值。替换(/\D/g,);
可观察的;
}
});
if($(元素).is('input')){
ko.applyBindingsToNode(元素{
仅数字:正确,
最大长度:10,
值:格式化
});
}否则{
ko.applyBindingsToNode(元素{
仅数字:正确,
文本:格式化
});
}
返回{
ControlsDescentBindings:true
};
}
};
有人能给我指路吗
谢谢:D使用
通知:始终扩展格式的计算obs:
ko.bindingHandlers.conta = {
init : function(element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
var observable = valueAccessor(), formatted = ko.computed({
...
}).extend({ notify: 'always' });
...
这将迫使它始终通知,即使没有更改。您可以扩展代码并将其制作成一个小程序吗?编辑器工具栏上有一个“Stack Snippet”按钮,甚至可以让它在SO上运行。嘿,我做了一个例子:如果你删除“-”,敲除将调用read方法。。但是返回值并没有更新元素=(