2013-11-23 10 views
10

In questo esempio, ho un input e una divisione din vincolati alla stessa proprietà. Ma in caso di modifica del testo in input, le modifiche non si riflettono nell'elemento div.Elementi con collegamento dinamico con applyBindingsToNode che non risponde alle modifiche

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

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

vincolante dichiarativa non è un'opzione per me, perché ho bisogno di legarsi a elementi condivisi in vista parziale (ASP.NET MVC).

Grazie

+0

Non capisco il motivo per cui il fatto è necessario associare gli elementi condivisi in vista parziale significa dichiarativa vincolante non è un'opzione. Ti dispiacerebbe elaborare su questo? –

+0

Perché a volte gli elenchi di selezione e i campi di input vengono utilizzati nei moduli di creazione e nei moduli di ricerca/filtro. Sto condividendo i moduli come viste parziali in tutta la mia applicazione. Gli elenchi di selezione sono collegati sul lato server utilizzando un repository memorizzato nella cache. – puri

+1

Che ne dici di utilizzare il modello di associazione per questo? –

risposta

12

si sono vincolanti per il valore del osservabile al posto del osservabile in sé.

Prova:

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

Grande. Ma ho realizzato che la mia proprietà è annidata. Quindi, come funziona qualcosa di simile: value: vm.Person(). Status? – puri

+1

Potrebbe funzionare ma non posso dirlo senza vedere il codice. Ti dispiacerebbe creare un breve esempio di codice autonomo? –

+0

Grazie molto bene! –

0

ho usato la funzione di pre-elaborazione (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; 
    } 
}; 
Problemi correlati