Новое для нокаута Я пытаюсь создать POC для пользовательских элементов.Пользовательский элемент внутри foreach не ожидал модель в нокауте
Модели просты, MainModel содержит массив LinkModel.
Цель состоит в том, чтобы перебирать массив ссылок для отображения 1 настраиваемого элемента «settings-view-link» для каждого объекта LinkModel.
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>
Что я вижу в том, что если в пользовательском элементе нужно использовать $ родителю. чтобы моя привязка данных работала, как ожидалось. Использование
<div><strong data-bind='text: $parent.name'></strong></div>
вместо
<div><strong data-bind='text: name'></strong></div>
делает появляться имя моей ссылки на веб-странице.
Я ожидал, что внутри пользовательского элемента он обрабатывает объект LinkModel, но это не так, это как-то «подмодель». Может кто-нибудь объяснить, почему я должен использовать $ parent? Код неправильный, но почему? Я действительно ожидаю наличия объекта LinkModel внутри моего пользовательского элемента.
Большое спасибо
Большое спасибо, это работает! – Seamus