Erstellen Sie eine 2-Wege-Bindung mit einem beobachtbaren Plugin

Die Anhaltspunkte für diese Frage scheinen so schwer zu finden, dass ich anfange zu denken, dass sie entweder offensichtlich (und mir fehlt etwas), nutzlos oder unmöglich sein muss:

Ich bekomme das 2-Wege-Binding im Knockout mit Observables (ko.observables ()). Alle diese Klammern sind jedoch ein echter Schmerz. Also, wenn ich Durandal benutze, würde ich das gebenobservableEinstecken eines Versuchs:http://durandaljs.com/documentation/Binding-Plain-Javascript-Objects.html

(Fürs Protokoll habe ich auch folgendes ausprobiert:http://blog.stevensanderson.com/2013/05/20/knockout-es5-a-plugin-to-simplify-your-syntax/)

Beide funktionieren gut mit KO'svalueBindung.

Mein Problem ist, dass ich für meine Anwendung mehrere benutzerdefinierte Knockout-Bindungen habe und nicht weiß, wie Sie eine beobachtbare Eigenschaft aktualisieren, die in diesen benutzerdefinierten Bindungen nicht ko.observable () ist.

In meiner Bindung würde ich normalerweise Folgendes tun:

ko.bindingHandlers.testBinding = {
    init: function(element, valueAccessor) {
        var myObservable = valueAccessor();
        // here I could detect if it's an observable or a POJO
        // ... how to know if it's a property ???

        $(element).blur(function() {

            // ... how to write to myObservable if it's a writable property
            // ... and not a ko.observable() ???
            myObservable($(element).val());

        });

    },
    update: function(element, valueAccessor) {
        $(element).val(ko.unwrap(valueAccessor()));
    }
};

Ich verstehe jedoch, dass ich bei Observablen den Verweis auf das zugrunde liegende Objekt und das Objekt benötigen würdeName der Eigenschaft, um eine Aktualisierung durchzuführen. (Ich kann das erstere bekommen, aber wie bekomme ich das letztere?)

Ich habe in die geschautvalue Knockout-Bindung, um zu versuchen, zu verstehen, aber ohne mehr Erfolg ...

Hätte jemand ein einfaches Beispiel, wie es mit dem beobachtbaren Plugin aussehen würde? Jeder Hinweis wäre sehr dankbar.

Vielen Dank

Antworten auf die Frage(2)

Ihre Antwort auf die Frage