为什么组件被配置在参数变化中?
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
成为 disposed
和 re-instantiated
如果 params
注入变化。
知道为什么会这样吗?
您以错误的方式传递组件参数:KnockoutJs 需要一个具有键和值的对象,您传递的是一个可观察对象。我没有深入了解为什么最终会触发处置的细节,但如果您按预期传递对象,则不会再调用处置函数。
<div data-bind='component: { name: "some-component", params: {foo: foo} }'>
<p data-bind="text: name"></p>
</div>
根据 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
成为 disposed
和 re-instantiated
如果 params
注入变化。
知道为什么会这样吗?
您以错误的方式传递组件参数:KnockoutJs 需要一个具有键和值的对象,您传递的是一个可观察对象。我没有深入了解为什么最终会触发处置的细节,但如果您按预期传递对象,则不会再调用处置函数。
<div data-bind='component: { name: "some-component", params: {foo: foo} }'>
<p data-bind="text: name"></p>
</div>