0

コンポーネントのライフサイクルに関するkoのコンポーネントのドキュメントによると:

コンポーネント バインディングの名前の値が明らかに変化する場合、または囲んでいる制御フロー バインディングによってコンテナー要素が削除される場合、コンテナー要素が DOM から削除される直前にビューモデルの破棄関数が呼び出されます。

コンポーネントがこの 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);

私のフィドルで発生しているドキュメントに上記のポイントが見当たりません。私は確かに a が変化するcomponentことdisposedを期待していません。re-instantiatedparams

なぜこれが起こっているのですか?

4

1 に答える 1

1

コンポーネントのパラメーターを間違った方法で渡しています: KnockoutJs はキーと値を持つオブジェクトを必要とし、observable を渡しています。なぜ破棄がトリガーされるのかについては詳しく説明しませんでしたが、期待どおりにオブジェクトを渡すと、破棄関数は呼び出されなくなります。

<div data-bind='component: { name: "some-component", params: {foo: foo} }'>
    <p data-bind="text: name"></p> 
</div>
于 2015-09-06T21:25:27.713 に答える