0
我有一個可寫的內部自定義綁定計算格式化observable。然而,當用戶刪除格式化掩碼時,讀取函數不會觸發,因爲observable刪除所有非數字,好吧,它的工作原理應該是這樣,所以我添加了notifySubcribers來每次調用read,即使可觀察值沒有變化和它的工作,但UI元素心不是令人耳目一新的新值(讀回)NotifySubscribers不刷新用戶界面(可寫計算)
按照代碼:
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
};
}
};
能有人給我一些方向嗎?
感謝:d
你可以擴展你的代碼,並將它製作成一個小的repro?編輯器工具欄上有一個「Stack Snippet」按鈕,它甚至可以讓你在SO上運行它。 – Jeroen 2014-11-04 14:00:23
嘿,我做了這個小提琴的例子:http://jsfiddle.net/Lyad24p4/如果你抹去「 - 」,淘汰賽將調用讀取方法..但返回值isnt更新元素=( – ddacrs 2014-11-04 15:29:46