Neu zu knockout Ich versuche, ein POC für benutzerdefinierte Elemente aufzubauen.Benutzerdefinierte Element in foreach haben nicht erwartet, Modell in Knockout
Die Modelle sind einfach, ein MainModel enthält ein Array von LinkModel.
Ziel ist die Iteration durch das Array von Links, um für jedes LinkModel-Objekt ein benutzerdefiniertes Element "settings-view-link" anzuzeigen.
function LinkModel(params) {
var self = this;
self.name = ko.observable(params.name);
}
function MainModel() {
var self = this;
self.links = ko.observableArray([
new LinkModel({ name: "link1"}),
new LinkModel({ name: "link2"})
]);
};
$(function() {
//registration of the custom element
ko.components.register('settings-view-link',
{
viewModel: LinkModel,
template: "<div><strong data-bind='text: name'></strong></div>"
});
ko.applyBindings(new MainModel());
});
<div>
<ul data-bind="foreach: links">
<p data-bind="text: name"></p> <!-- handled correctly -->
<settings-view-link></settings-view-link> <!-- handled not the way I expect-->
</ul>
</div>
Was ich sehe, ist, dass, wenn in der benutzerdefinierten Element muss ich $ parent verwenden. damit meine Datenbindung wie erwartet funktioniert.
<div><strong data-bind='text: $parent.name'></strong></div>
Mit
statt
<div><strong data-bind='text: name'></strong></div>
macht den Namen meiner Links auf der Webseite erscheinen.
Ich erwartete, dass innerhalb der benutzerdefinierten Element behandelt es ein LinkModel-Objekt, aber es ist nicht, es ist irgendwie ein "Submodell". Kann jemand erklären, warum ich $ Eltern verwenden muss? Code ist falsch, aber warum? Ich erwarte wirklich ein LinkModel-Objekt in meinem benutzerdefinierten Element.
Vielen Dank
Vielen Dank es funktioniert! – Seamus