Mam przeczucie, że tutaj brakuje mi czegoś prostego, ale nie mogę tego pojąć. Oto mój skrypt:Dlaczego ta funkcja observableArray knockoutjs nie powoduje aktualizacji interfejsu?
function FormDefinition()
{
var self = this;
self.Fields = ko.observableArray([new FieldDefinition()]);
}
function FieldDefinition()
{
var self = this;
self.Name = "Test";
}
function ViewModel()
{
var self = this;
self.formDef = ko.observable(new FormDefinition());
self.Name = "bob"
self.addField = function(){
this.formDef().Fields().push(new FieldDefinition());
}
}
ko.applyBindings(new ViewModel());
i tu jest mój znaczników:
<a data-bind="click: addField">Add</a><br/>
<span data-bind="text: Name"></span>
<ul data-bind="foreach: formDef().Fields">
<li data-bind="text: Name"></li>
</ul>
i tutaj jest jsFiddle: http://jsfiddle.net/5xSmr/
Oczekiwane zachowanie jest, że klikając „Dodaj” spowodowałoby UI do aktualizacji . debugowanie ujawnia, że addfield jest wywoływany.
Chciałbym zaznaczyć obie jako odpowiedź. Dzięki! – Daniel
@Daniel Polecam zaznaczyć to jako zatwierdzoną odpowiedź, ponieważ zapewnia zarówno przykład pracy, jak i wyjaśnienie _why_. – Madbreaks