Почему компонент, размещаемый в параметрах, изменяется?
В соответствии с документацией по компоненту ко на жизненном цикле компонента:
Если значение имени привязки компонента изменяется заметным образом или если привязка потока управления влечет за собой удаление элемента контейнера, то любая функция dispose в модели представления вызывается непосредственно перед удалением элемента контейнера из DOM
Я не уверен, почему мой компонент расположен на этой скрипке.
<div data-bind='component: { name: "some-component", params: foo }'>
<p data-bind="text: name"></p>
</div>
function ComponentViewModel(params) {
}
ComponentViewModel.prototype.dispose = function() {
console.log('disposing...');
};
ko.components.register('some-component', {
viewModel: ComponentViewModel,
template : '<div></div>'
});
var rootvm = {
foo : ko.observable('1')
};
ko.applyBindings(rootvm);
setTimeout(function() {
rootvm.foo('2'); // this is disposing ComponentViewModel, why ??
}, 3000);
Я не вижу ни одного из вышеперечисленных пунктов в документации на моей скрипке. Я, конечно, не ожидаю component
быть disposed
а также re-instantiated
если params
введенное изменение.
Есть идеи, почему это происходит?
1 ответ
Вы передаете параметры компонента неверным образом: KnockoutJs требует объект с ключами и значениями, а вы передаете наблюдаемый. Я не стал вдаваться в детали того, почему это приводит к удалению, но если вы передадите объект так, как он ожидает, функция dispose больше не вызывается.
<div data-bind='component: { name: "some-component", params: {foo: foo} }'>
<p data-bind="text: name"></p>
</div>