@@ -4981,19 +4981,18 @@ return result;
4981
4981
}
4982
4982
} ,
4983
4983
4984
- updateChildren : function ( domQuery , collection , domElement ) {
4984
+ updateChildren : function ( collection , updateCount , domQuery , domElement ) {
4985
4985
var template = this . _template ;
4986
4986
var child = template [ 0 ] ;
4987
4987
var isOneChild = template . length === 1 && VirtualElement . Is ( child ) ;
4988
4988
var childNodes = domElement . childNodes ;
4989
4989
var syncIndex = domQuery . getSyncIndex ( ) ;
4990
4990
var childContexts = domQuery . _context . childs ;
4991
4991
var chunkLength = this . _length ( ) ;
4992
- var length = Math . min ( collection . length , childNodes . length ) ;
4993
4992
var index = - 1 ;
4994
4993
var context ;
4995
4994
4996
- while ( ++ index < length ) {
4995
+ while ( ++ index < updateCount ) {
4997
4996
domQuery . _context = context = childContexts [ index ] ;
4998
4997
context . $this = collection [ index ] ;
4999
4998
context . $parent = context . $parentContext . $this ;
@@ -5882,8 +5881,12 @@ return result;
5882
5881
elementData . haveData = true ;
5883
5882
if ( ! elementData . execute ) {
5884
5883
elementData . execute = [ ] ;
5884
+ elementData . executeHash = { } ;
5885
+ }
5886
+ if ( ! elementData . executeHash [ methods [ i ] . query ] ) {
5887
+ elementData . execute . push ( methods [ i ] ) ;
5888
+ elementData . executeHash [ methods [ i ] . query ] = true ;
5885
5889
}
5886
- elementData . execute . push ( methods [ i ] ) ;
5887
5890
continue ;
5888
5891
}
5889
5892
Observer . startObserving ( ) ;
@@ -7277,6 +7280,7 @@ return result;
7277
7280
*/
7278
7281
update : function ( ) {
7279
7282
var elements = this . _elements ;
7283
+ var elementData ;
7280
7284
var domQuery ;
7281
7285
var context ;
7282
7286
var element ;
@@ -7288,7 +7292,8 @@ return result;
7288
7292
context = expression . context ;
7289
7293
7290
7294
if ( ! element ) {
7291
- element = expression . element = ElementsData . data ( expression . elementId ) . dom ;
7295
+ elementData = ElementsData . data ( expression . elementId ) ;
7296
+ element = expression . element = elementData . dom ;
7292
7297
}
7293
7298
7294
7299
try {
@@ -7302,15 +7307,22 @@ return result;
7302
7307
offset = expression . length - value . length ;
7303
7308
expression . length = value . length ;
7304
7309
7305
- if ( expression . attr ) {
7306
- element . setAttribute ( expression . attr , Expression . GetValue ( context , null , expression . entire ) ) ;
7307
- } else {
7308
- if ( element . nextSibling ) {
7309
- element = element . nextSibling ;
7310
- element . nodeValue = value + element . nodeValue . substring ( expression . length + offset ) ;
7310
+ if ( element ) {
7311
+ if ( expression . attr ) {
7312
+ element . setAttribute ( expression . attr , Expression . GetValue ( context , null , expression . entire ) ) ;
7311
7313
} else {
7312
- element . parentNode . appendChild ( document . createTextNode ( value ) ) ;
7313
- }
7314
+ if ( element . nextSibling ) {
7315
+ element = element . nextSibling ;
7316
+ element . nodeValue = value + element . nodeValue . substring ( expression . length + offset ) ;
7317
+ } else {
7318
+ element . parentNode . appendChild ( document . createTextNode ( value ) ) ;
7319
+ }
7320
+ }
7321
+ } else {
7322
+ element = elementData . virtual ;
7323
+ if ( expression . attr ) {
7324
+ element . attr ( expression . attr , Expression . GetValue ( context , null , expression . entire ) ) ;
7325
+ }
7314
7326
}
7315
7327
} ) ;
7316
7328
@@ -7443,12 +7455,13 @@ return result;
7443
7455
return this ;
7444
7456
}
7445
7457
7458
+ array = blocks . unwrap ( array ) ;
7459
+
7446
7460
var current = this . __value__ ;
7447
7461
var chunkManager = this . _chunkManager ;
7448
7462
var addCount = array . length - current . length ;
7449
7463
var removeCount = Math . max ( current . length - array . length , 0 ) ;
7450
-
7451
- array = blocks . unwrap ( array ) ;
7464
+ var updateCount = array . length - addCount ;
7452
7465
7453
7466
Events . trigger ( this , 'removing' , {
7454
7467
type : 'removing' ,
@@ -7461,12 +7474,12 @@ return result;
7461
7474
items : array ,
7462
7475
index : 0
7463
7476
} ) ;
7464
-
7477
+
7465
7478
chunkManager . each ( function ( domElement , virtualElement ) {
7466
7479
var domQuery = blocks . domQuery ( domElement ) ;
7467
7480
7468
7481
domQuery . contextBubble ( blocks . context ( domElement ) , function ( ) {
7469
- virtualElement . updateChildren ( domQuery , array , domElement ) ;
7482
+ virtualElement . updateChildren ( array , updateCount , domQuery , domElement ) ;
7470
7483
} ) ;
7471
7484
} ) ;
7472
7485
@@ -7996,6 +8009,22 @@ return result;
7996
8009
newObservable . view . _initialized = false ;
7997
8010
7998
8011
newObservable . view . on ( 'get' , newObservable . _getter ) ;
8012
+
8013
+ newObservable . on ( 'add' , function ( ) {
8014
+ if ( newObservable . view . _initialized ) {
8015
+ newObservable . view . _connections = { } ;
8016
+ newObservable . view . reset ( ) ;
8017
+ ExtenderHelper . executeOperations ( newObservable ) ;
8018
+ }
8019
+ } ) ;
8020
+
8021
+ newObservable . on ( 'remove' , function ( ) {
8022
+ if ( newObservable . view . _initialized ) {
8023
+ newObservable . view . _connections = { } ;
8024
+ newObservable . view . reset ( ) ;
8025
+ ExtenderHelper . executeOperations ( newObservable ) ;
8026
+ }
8027
+ } ) ;
7999
8028
8000
8029
return newObservable ;
8001
8030
} ,
@@ -8213,22 +8242,6 @@ return result;
8213
8242
filter : callback
8214
8243
} ) ;
8215
8244
8216
- observable . on ( 'add' , function ( ) {
8217
- if ( observable . view . _initialized ) {
8218
- observable . view . _connections = { } ;
8219
- observable . view . reset ( ) ;
8220
- ExtenderHelper . executeOperations ( observable ) ;
8221
- }
8222
- } ) ;
8223
-
8224
- observable . on ( 'remove' , function ( ) {
8225
- if ( observable . view . _initialized ) {
8226
- observable . view . _connections = { } ;
8227
- observable . view . reset ( ) ;
8228
- ExtenderHelper . executeOperations ( observable ) ;
8229
- }
8230
- } ) ;
8231
-
8232
8245
return observable ;
8233
8246
} ;
8234
8247
@@ -10530,7 +10543,7 @@ return result;
10530
10543
*/
10531
10544
read : function ( params , callback ) {
10532
10545
// TODO: Write tests for the callback checking if it is being called
10533
- var context = this . __context__ ;
10546
+ var _this = this ;
10534
10547
10535
10548
if ( blocks . isFunction ( params ) ) {
10536
10549
callback = params ;
@@ -10539,7 +10552,7 @@ return result;
10539
10552
this . _dataSource . read ( {
10540
10553
data : params
10541
10554
} , callback ? function ( ) {
10542
- callback . call ( context ) ;
10555
+ callback . call ( _this . __context__ ) ;
10543
10556
} : blocks . noop ) ;
10544
10557
10545
10558
return this ;
@@ -11215,11 +11228,7 @@ return result;
11215
11228
this . _started = true ;
11216
11229
this . _serverData = window . __blocksServerData__ ;
11217
11230
this . _createViews ( ) ;
11218
- if ( document . __mock__ && window . __mock__ ) {
11219
- this . _ready ( element ) ;
11220
- } else {
11221
- blocks . domReady ( blocks . bind ( this . _ready , this , element ) ) ;
11222
- }
11231
+ blocks . domReady ( blocks . bind ( this . _ready , this , element ) ) ;
11223
11232
}
11224
11233
} ,
11225
11234
@@ -11230,13 +11239,17 @@ return result;
11230
11239
} , this ) ) ;
11231
11240
} , this ) ;
11232
11241
} ,
11233
-
11234
- _ready : function ( element ) {
11235
- this . _serverData = window . __blocksServerData__ ;
11242
+
11243
+ _startHistory : function ( ) {
11236
11244
this . _history = new History ( this . options ) ;
11237
11245
this . _history
11238
11246
. on ( 'urlChange' , blocks . bind ( this . _urlChange , this ) )
11239
11247
. start ( ) ;
11248
+ } ,
11249
+
11250
+ _ready : function ( element ) {
11251
+ this . _serverData = window . __blocksServerData__ ;
11252
+ this . _startHistory ( ) ;
11240
11253
blocks . query ( this , element ) ;
11241
11254
this . _viewsReady ( this . _views ) ;
11242
11255
} ,
0 commit comments