Skip to content

Commit 49e7561

Browse files
author
Roman Kartsev
committed
Fix: do not search for what is not there
- do not try to find node for view if it is not in the update tree
1 parent 8a646a1 commit 49e7561

File tree

2 files changed

+28
-2
lines changed

2 files changed

+28
-2
lines changed

src/ns.update.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -321,6 +321,8 @@
321321
this.view._getUpdateTree(tree);
322322
}
323323

324+
this.updateTree = tree;
325+
324326
this.log('created render tree', tree);
325327
this.stopTimer('collectViews');
326328

@@ -367,7 +369,7 @@
367369
this.switchTimer('triggerHideEvents', 'insertNodes');
368370

369371
if (!this.view.destroyed) {
370-
this.view._updateHTML(node, {toplevel: true}, viewEvents);
372+
this.view._updateHTML(node, { toplevel: true, updateTree: this.updateTree }, viewEvents);
371373
}
372374

373375
this.switchTimer('insertNodes', 'triggerEvents');

src/ns.view.js

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1197,6 +1197,9 @@
11971197
* Обновляем (если нужно) ноду блока.
11981198
* @param {HTMLElement} node
11991199
* @param {object} updateOptions
1200+
* @package {boolean} updateOptions.toplevel
1201+
* @package {boolean} [updateOptions.parent_added]
1202+
* @package {ns.View~UpdateTree} [updateOptions.updateTree]
12001203
* @param {object} events
12011204
* @private
12021205
*/
@@ -1212,6 +1215,7 @@
12121215
// "my-root-view2": {/* tree 2 */}
12131216
// }
12141217
var options_next;
1218+
12151219
if (updateOptions.toplevel) {
12161220
options_next = no.extend({}, updateOptions);
12171221

@@ -1283,8 +1287,28 @@
12831287

12841288
// Рекурсивно идем вниз по дереву, если не находимся в async-режиме
12851289
if (!this.asyncState) {
1290+
// Вычисляем поддерево updateTree для текущего вида.
1291+
var updateTree = updateOptions.updateTree ? updateOptions.updateTree.views[this.id] : null;
1292+
var parentId = this.id;
1293+
12861294
this._apply(function(view) {
1287-
view._updateHTML(viewNode, options_next, events);
1295+
// Обновляем вложенный вид если
1296+
// - для текущего вида не указан updateTree
1297+
// - для текущего вида указан updateTree и в нём присутствует вложенный вид
1298+
if (!updateTree || updateTree.views[view.id]) {
1299+
// Для вложенного вида передаём либо весь updateOptions.updateTree,
1300+
// либо своё поддерево updateOptions.updateTree.
1301+
var nested_update_tree = !updateTree ? updateOptions.updateTree : updateTree.views[view.id];
1302+
var nested_options_next = no.extend({}, options_next, { updateTree: nested_update_tree });
1303+
1304+
view._updateHTML(viewNode, nested_options_next, events);
1305+
}
1306+
1307+
if (ns.DEBUG) {
1308+
if (updateTree && !updateTree.views[view.id]) {
1309+
ns.log.debug('[ns.View] skip updating HTML for ' + view.id + ' inside ' + parentId, updateTree);
1310+
}
1311+
}
12881312
});
12891313
}
12901314
};

0 commit comments

Comments
 (0)