2013-11-23 11 views
10

In diesem Beispiel habe ich eine dynamisch gebundene Eingabe und div an die gleiche Eigenschaft. Beim Ändern von Text in der Eingabe werden Änderungen jedoch nicht im div-Element wiedergegeben.Dynamisch gebundene Elemente mit applyBindingsToNode, die nicht auf Änderungen reagieren

http://jsfiddle.net/rpuri/Bcps5/

ko.applyBindingsToNode(document.getElementById('input-health'), { 
    value: vm.status(), 
    valueUpdate: 'afterkeydown' 
}); 

deklarative Bindung ist für mich keine Option, da ich auf gemeinsam genutzte Elemente in Teilansichten (ASP.NET MVC) binden müssen.

Dank

+0

Ich verstehe nicht, warum die Tatsache, Sie bedeutet gemeinsamen Elemente in Teilansichten binden, müssen keine Option deklarative Bindung ist. Würde es Ihnen etwas ausmachen, darauf näher einzugehen? –

+0

Da manchmal die Auswahllisten und Eingabefelder in Create-Formularen und Such-/Filterformularen verwendet werden. Ich teile Formulare als Teilansichten in meiner gesamten Anwendung. Die Auswahllisten sind auf der Serverseite mit einem zwischengespeicherten Repository gebunden. – puri

+1

Was ist mit der Verwendung der Vorlagenbindung dafür? –

Antwort

12

Sie auf den Wert der beobachtbaren verbindlich sind anstelle des beobachtbaren selbst.

Versuchen:

ko.applyBindingsToNode(document.getElementById('health'), { 
    text: vm.status, // <- not invoking status, binding to the observable itself. 
    valueUpdate: 'keydown' 
}); 

ko.applyBindingsToNode(document.getElementById('input-health'), { 
    value: vm.status, 
    valueUpdate: 'keydown' 
}); 

http://jsfiddle.net/hwQsm/

+0

Großartig. Aber ich erkannte, dass mein Eigentum verschachtelt ist. Wie also würde so etwas funktionieren: value: vm.Person(). Status? – puri

+1

Das könnte funktionieren, aber ich kann es nicht sagen, ohne Ihren Code zu sehen - Würden Sie gerne ein Beispiel für einen kurzen eigenständigen Code erstellen? –

+0

Danke sehr gut! –

0

Ich benutzte den Vorprozess Funktion (Knockout 3).

<input type="text" data-bind="value: LastName, vuClass: 'text'" /> 

ko.bindingHandlers.vuClass = { 
    preprocess: function (value, name, addBindingCallback) { 
     if (value == "'text'") { 
      addBindingCallback('valueUpdate', "['afterkeydown', 'blur']"); 
     } 

     // ... 
     // Check other values. 
     // ... 

     return value; 
    } 
}; 
Verwandte Themen