これは興味深いもので、同じことを考えた人や実装した人がいるのだろうかと考えています。
私のシナリオ:
<div>
最初の読み込み時に一連のタグを作成したい、監視可能な配列があります。簡単に、Knockout がこれをやってくれます。ただし、ボタンがクリックされた後、別の結果セットを再レンダリングするのではなく、同じ 要素にロードしたいと思います (物事の外観によるノックアウトのデフォルト動作)。<div>
そのような:
function viewModel() {
var self = this;
self.testArray = ko.observableArray([]);
self.loadMore = function () {
var length = self.testArray().length;
if (length > 0) {
console.log('loading into divs');
// Load into original <div>'s
// This is deleting the old <div>'s from the DOM and creating new ones...
// How can I just replace the original <div> content for performance gains?
for (var i = 0; i < 10; i++) {
self.testArray.replace(self.testArray()[i], new { text: 'New Text' });
}
}
else {
// Create the <div>'s by pushing items to the array
for (var i = 0; i < 10; i++) {
self.testArray.push(ko.observable(new { text: 'New Text' }));
}
}
};
}
var model = new viewModel();
model.loadMore();
ko.applyBindings(model);
<!-- ko foreach: testArray -->
<div data-bind="text: text"></div>
<!-- /ko -->
<button data-bind="click: loadMore">Next</button>
もう少し分かりやすく...
** 最初のロード **
<div></div> - created
<div></div> - created
<div></div> - created
<div></div> - created
<div></div> - created
** 2 回目のロード **
<div></div> - deleted
<div></div> - deleted
<div></div> - deleted
<div></div> - deleted
<div></div> - deleted
<div></div> - created
<div></div> - created
<div></div> - created
<div></div> - created
<div></div> - created
2回目のロードで欲しいもの...
<div></div> - edited
<div></div> - edited
<div></div> - edited
<div></div> - edited
<div></div> - edited
何か案は?DOM でを再作成するのではなく、パフォーマンスを向上させるためにそれを実行しようとしてい<div>
ます。単にそこにあるものを再利用したいだけです。