为什么组件被配置在参数变化中?

Why is component being disposed in params change?

根据 ko's component documentation 组件生命周期:

If the component binding’s name value changes observably, or if an enclosing control-flow binding causes the container element to be removed, then any dispose function on the viewmodel is called just before the container element is removed from the DOM

我不确定为什么我的组件会在 this fiddle 上处理。

<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);

我在 fiddle 上的文档中看不到上述任何要点。我当然不希望 component 成为 disposedre-instantiated 如果 params 注入变化。

知道为什么会这样吗?

您以错误的方式传递组件参数:KnockoutJs 需要一个具有键和值的对象,您传递的是一个可观察对象。我没有深入了解为什么最终会触发处置的细节,但如果您按预期传递对象,则不会再调用处置函数。

<div data-bind='component: { name: "some-component", params: {foo: foo} }'>
    <p data-bind="text: name"></p> 
</div>