2016-07-20 7 views
0

Möglicherweise ein Missverständnis in meinem Lernen hier.In knockoutjs wie kann ich an eine Eigenschaft binden und die Ansicht aktualisiert werden, wenn sich die Eigenschaft ändert?

Ich setze meine Viewmodel-Bindung ist auf "beobachten" eine Eigenschaft eines Javascript-Objekts festgelegt. Ich habe einen Intervall-Timer erstellt, um die Eigenschaft des Objekts umzuschalten, aber meine Benutzeroberfläche spiegelt die Änderung nicht wider. Wie kann ich dem Framework mitteilen, dass sich die Eigenschaft des Objekts geändert hat, und es entsprechend aktualisieren?

anschauliches Beispiel: http://liveweave.com/Xfrcrv

<p>Section 1 <span data-bind="visible : hasErrors">***</span></p> 

<script> 
var myObj = {sectionhasErrors : true} 
var vm = { 
    hasErrors : ko.observable(myObj.sectionhasErrors) 
}; 

ko.applyBindings(vm); 
var iTimer = setInterval(function() { 
    myObj.sectionhasErrors = !myObj.sectionhasErrors 
    console.log('toggled!'); 
},5000); 
</script> 

Antwort

0

Knockout kann nicht "beobachten" individuelle Eigenschaften eines Objekts. Sie müssten das gesamte Objekt in eine Observable stellen.

<p>Section 1 <span data-bind="visible : myObj().hasErrors">***</span></p> 

var myObj = { 
    hasErrors: true 
} 

var vm = { 
    myObj: ko.observable(myObj) 
}; 

ko.applyBindings(vm); 

var iTimer = setInterval(function() { 
    var myObj = vm.myObj(); 
    myObj.hasErrors = false; 
    vm.myObj(myObj); 
    console.log('toggled!'); 
},5000); 

Es mir scheint, dass Sie nicht einige grundlegende Konzepte Knockout begriffen haben. Ich würde empfehlen, dass Sie durch die tutorials auf ihrer Website arbeiten.

Verwandte Themen