Я создал расширитель нокаута, поэтому я могу легко вернуть поля формы к их исходным значениям.Перемещение логики с точки зрения на пользовательскую привязку
Я хочу, чтобы вырезать загромождали с моей точки зрения, поэтому я хочу, чтобы превратить это:
<div data-bind="if: myObservedValue.hasChanges">
<a href="#" data-bind="click: myObservedValue.revert">Revert</a>
</div>
В чем-то вроде этого:
<a href="#" data-bind="revert: myObservedValue">Revert</a>
Я знаю, что мне нужно, чтобы создать пользовательскую привязку но я изо всех сил стараюсь найти чистый способ:
- Только передайте мою наблюдаемую привязку и примените видимую привязку rnally (с учетом того, или нет, мое наблюдаемого расширений hasChanges)
- Объединения нескольких привязок с момента моего «Возвратить» связывания нужно будет использовать «нажмите» и «видимые» привязки
- Избегайте воздействия на функцию вернуться к моим
заранее спасибо
ko.extenders.revert = function(target, option) {
target.revert = function() {
target(target.previousValue);
target.hasChanges(false);
};
target.previousValue = option;
target.hasChanges = ko.observable(false);
target.hasChanges.extend({
rateLimit: 100
});
target.subscribe(function(newValue) {
target.hasChanges(target() != target.previousValue);
});
return target;
};
var Vm = function(initialValue) {
this.myObservedValue = ko.observable(initialValue).extend({
revert: initialValue
});
this.revert = function() {
this.revert();
}.bind(this.myObservedValue);
return {
myObservedValue: this.myObservedValue,
revert: this.revert
}
}
ko.applyBindings(new Vm('Edit me!!!'));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>
<input data-bind="textInput: myObservedValue" />
<div data-bind="if: myObservedValue.hasChanges">
<a href="#" data-bind="click: myObservedValue.revert">Revert</a>
</div>
Спасибо, Роберт. Я также нашел видео от Ryan Niemeyer о механизме предварительной обработки, который, по-видимому, может упростить синтаксис: https://www.youtube.com/watch?v=kep19WW7rp8#t=326 –