У меня проблема, когда я хочу хранить все как строки с кавычками и отображать все без кавычек в форме. Моим первым решением было просто создать два дополнительных bindHandlers, чтобы сделать это для значения и один для текста.Запись экранированного/unescaped Наблюдаемая в нокаут
ko.bindingHandlers.escapedValue = {
init : function (element, valueAccessor, allBindingsAccessor) {
var $element = $(element),
contentObservable = valueAccessor(),
currentTxt = ko.utils.unwrapObservable(contentObservable);
if (currentTxt) {
$element.val(unescape(currentTxt));
}
$element.change(function (e) {
contentObservable(escape($element.val()));
});
}
};
ko.bindingHandlers.escapedText = {
init : function (element, valueAccessor, allBindingsAccessor) {
var $element = $(element),
contentObservable = valueAccessor(),
currentTxt = ko.utils.unwrapObservable(contentObservable);
if (currentTxt) {
$element.text(unescape(currentTxt));
}
contentObservable.subscribe(function (newValue) {
$element.text(unescape(newValue));
});
}
};
Однако это дал мне два вопроса, 1) Я не получить жить обновлений больше после того, как ключ вниз 2) Когда я делаю некоторые проверки на значениях, например, длину символа он проверяет длину строки в кавычках.
Как я могу написать что-то вроде ko.escapedObservable() или ko.subscribable.fn.escaped()
я получил ближе, но не могу показаться, чтобы получить спасительную правильно. Так что теперь он показывает правильно и делает сравнение правильно, но когда я Гото сохранить его значения все еще unescped
ko.escapedObservable = function (initialValue) {
var observableVal = ko.observable(initialValue),
result = ko.computed({
read: function() {
return unescape(observableVal());
},
write: function (newValue) {
return observableVal(escape(newValue));
}
});
this.toJSON = function() {
return escape(observableVal());
};
return result;
};
==== ==== EDIT Решение с использованием двух наблюдаемых // Бегство и текст экранирования в стоимость
ko.escapedObservable = function (initialValue) {
var observableVal = ko.observable(initialValue),
result = ko.computed({
read: function() {
return observableVal();
},
write: function (newValue) {
observableVal(newValue);
}
});
result.unescaped = ko.computed({
read: function() {
return unescape(observableVal());
},
write: function (newValue) {
observableVal(escape(newValue));
}
});
return result;
};
да что отлично подходит для 1 поля, но представьте себе, 20,30, или неизвестное количество тех типов свойств, было бы много код для этого везде. Я хочу как-то сделать это глобально через любой нокаут, наблюдаемый, что я могу назвать escapedObservable() или что-то еще. – BillPull