2012-11-26 10 views
7

Ho una molto semplice vista Modello:Knockout visibile legame non funziona

var ViewModel = function() { 
    this.showRow = ko.observable(false); 
    this.toggleVisibility = function() { 
     if(this.showRow == true){ 
      this.showRow = false; 
     } 
     else{ 
      this.showRow = true; 
     } 
     alert('showRow is now '+this.showRow); //only here for testing 
    }; 
}; 

con altrettanto semplice markup:

<a href="#" data-bind="click: toggleVisibility">Toggle</a> 
<br /> 
<table> 
    <tr data-bind="visible: showRow">Some Text</tr> 
</table> 

Il mio problema è che quando il link viene cliccato, l'avviso box mostra (visualizzazione del valore corretto - vero/falso)

Tuttavia, il collegamento visibile sull'elemento tr non sembra funzionare - inizialmente (la riga deve essere invisibile al caricamento) né quando il valore di showRow commuta.

jsFiddle di superiore alla http://jsfiddle.net/alexjamesbrown/FgVxY/3/

+9

'this.showRow =' significa che stai sovrascrivendo la proprietà "osservabile". La proprietà è una funzione, non solo un valore, quando si utilizza l'osservabile. –

+0

Per aggiungere al punto di James D'Angelo, se si desidera aggiornare il valore di una proprietà osservabile, passare il valore come parametro alla proprietà. 'this.showRow (false)'; – Quickhorn

risposta

5

È necessario modificare il codice HTML come segue:

<table> 
    <tr data-bind="visible: showRow"><td>Some Text</td></tr> 
</table> 

e Javascript come segue:

var ViewModel = function() { 
    var self = this; 
    self.showRow = ko.observable(false); 
    self.toggleVisibility = function() { 

     self.showRow(!self.showRow()); 
     alert('showRow is now ' + self.showRow()); 
    }; 
}; 

ko.applyBindings(new ViewModel()); 

sintassi per impostare il valore alla proprietà è osservabile : self.showRow(value);

Se è necessario disporre di ag all'interno dei tag.

Ho anche modificato il vostro violino per semplificare il javascript e seguire le più recenti pratiche di codice per quanto riguarda "questo". Vedi http://jsfiddle.net/FgVxY/4/

+0

L'esempio non funziona. Cliccato "Attiva" non dà risposta. –

+1

Non sono sicuro del motivo per cui questa è stata la risposta scelta - il problema è quello che dicono i commenti nella domanda originale - l'assegnazione impropria ad un osservabile a eliminazione diretta. –