Ich habe eine benutzerdefinierte Komponente, die Funktionen verwendet, um die Parameter übergeben. In diesem Fall ändert sich der beobachtbare Wert ($ data) nicht, aber die Funktion verwendet eine andere Observable (die sich ändert) und eine Hash-Tabelle (die sich ändert, aber nicht beobachtbar gemacht werden kann).Knockout benutzerdefinierte Komponenten nicht aktualisieren
Die Anzeige wird aktualisiert, wenn ich diese Syntax verwenden:
<span style="width: 50px; position: absolute; left: 1100px;text-align:center" data-bind="component: {name: ''rotate'', params: {values: Helper.GetWeatherByFlight($data, ''Hi'')}}"></span>
Aber es wird nicht aktualisiert, wenn ich diese Syntax verwenden:
ko.components.register('rotate', {
viewModel: function (params) {
var values = [];
var inputValues = ko.isObservable(params.values) ? params.values() : params.values;
var length = inputValues.length;
this.MyClass = length > 1 ? "fade-effect" : "";
if (length >= 1) {
var index = m_counter % length;
$.each(inputValues, function (i, value) {
var opacity = (index == i) ? 1 : 0;
values.push({ value: value, opacity: opacity });
});
}
this.values = values;
},
template: '<span style="position:relative;" data-bind="foreach: values, attr: { class: MyClass }">\
<span style="left:0px;top:0px;position:absolute;width:100%;height:100%;" data-bind="text: Helper.GetValue(value, $element), style: {opacity: opacity}"></span>\
</span>'
});
:
<rotate style="width: 50px; position: absolute; left: 1100px;text-align:center" params="{values: Helper.GetWeatherByFlight($data, ''Hi'')}"></rotate>
Dies ist die Komponente Ich würde es vorziehen, das zweite Format verwenden zu können, aber jetzt bin ich mit dem ersten festgefahren. Gibt es etwas, das ich ändern kann, entweder in der Komponente oder in der Art, wie die Komponente aufgerufen wird, damit beide Formate korrekt aktualisiert werden? Ich erkenne, dass dies eine etwas unkonventionelle Nutzung ist.
Benutzerdefinierte benannte Komponente Elemente brauchen nicht geschweiften Klammern in den params = „“ Attribut. Es sind nur durch Komma getrennte Werte wie in einer regulären alten Datenbindung = "". params = "Werte: Helper.GetWeatherByFlight ($ data, 'Hi')" sollte ausreichen. – Budhead2004