Ich baue ein Menü und ich habe ein category
Objekt und es hat eine beobachtbare Array von menuitem
s.Erstellen Sie berechnete Eigenschaft auf den Inhalt eines Elements in einer Untersammlung
I erzeugt eine beobachtbare Eigenschaft, die auf der category
true
ist, wenn mindestens einer der menuitem
s im beobachtbaren Matrix eine Eigenschaft von active
true
hat.
(so hat die category
eine berechnete Eigenschaft active
benannt, die true
, wenn mindestens eines der Elemente in der beobachtbaren Array von MenuItems die zu true
gesetzt active
Eigenschaft hat sein)
Die active
Eigenschaft auf den menuitem
ist eine beobachtbare boolean
.
Jetzt scheint es, dass die berechnete Eigenschaft in der Kategorie sich nicht ändert, wenn sich die Eigenschaft auf ihrem Kind (Menü) ändert.
Ich kann den Wert des untergeordneten Elements (Menü) ändern, aber die berechnete Eigenschaft in der Kategorie nicht (ich protokolliere eine Konsole in der berechneten Eigenschaft in diesem Moment, und ich protokolliere einfach nicht, dass die berechnete Eigenschaft wird ausgewertet).
Ist das von Design, oder ich etwas falsch machen hier bin ...
PS wir die Version 2.3 von KO verwenden
, die eine große Repro von dem, was mein Code. Eine Sache, die mir aufgefallen ist, ist, dass Sie die Berechnung mit ', this) beenden;'. Wofür ist das? – Michel
Die an "ko.computed" übergebene Funktion wird nicht automatisch mit dem richtigen "this" -Kontext aufgerufen. Mit Knockout können Sie den Kontext übergeben, in dem die Funktion ausgeführt werden soll, und sie intern über '.call 'verwenden. Andere Möglichkeiten, die Funktion an die Instanz zu binden, sind via 'var self = this' oder' .bind (this) ' – user3297291