File tree 2 files changed +18
-14
lines changed
2 files changed +18
-14
lines changed Original file line number Diff line number Diff line change @@ -470,25 +470,27 @@ CompilerProto.define = function (key, binding) {
470
470
log ( ' defined root binding: ' + key )
471
471
472
472
var compiler = this ,
473
- data = compiler . data ,
474
- vm = compiler . vm ,
475
- value = binding . value = data [ key ] // save the value before redefinening it
476
-
477
- if ( utils . typeOf ( value ) === 'Object' && value . $get ) {
478
- compiler . markComputed ( binding )
479
- }
473
+ data = compiler . data ,
474
+ vm = compiler . vm ,
475
+ ob = data . __observer__
480
476
481
477
if ( ! ( key in data ) ) {
482
478
data [ key ] = undefined
483
479
}
484
480
485
- // if the data object is already observed, that means
486
- // this binding is created late. we need to observe it now .
487
- if ( data . __observer__ ) {
481
+ // if the data object is already observed, but the key
482
+ // is not observed, we need to add it to the observed keys .
483
+ if ( ob && ! ( key in ob . values ) ) {
488
484
Observer . convert ( data , key )
489
485
}
490
486
487
+ var value = binding . value = data [ key ]
488
+ if ( utils . typeOf ( value ) === 'Object' && value . $get ) {
489
+ compiler . markComputed ( binding )
490
+ }
491
+
491
492
Object . defineProperty ( vm , key , {
493
+ enumerable : ! binding . isComputed ,
492
494
get : binding . isComputed
493
495
? function ( ) {
494
496
return compiler . data [ key ] . $get ( )
Original file line number Diff line number Diff line change @@ -129,14 +129,16 @@ function convert (obj, key) {
129
129
if ( ( keyPrefix === '$' || keyPrefix === '_' ) && key !== '$index' ) {
130
130
return
131
131
}
132
- var observer = obj . __observer__ ,
133
- val = obj [ key ] ,
134
- values = observer . values
135
- values [ key ] = val
136
132
// emit set on bind
137
133
// this means when an object is observed it will emit
138
134
// a first batch of set events.
135
+ var observer = obj . __observer__ ,
136
+ values = observer . values ,
137
+ val = values [ key ] = obj [ key ]
139
138
observer . emit ( 'set' , key , val )
139
+ if ( Array . isArray ( val ) ) {
140
+ observer . emit ( 'set' , key + '.length' , val . length )
141
+ }
140
142
Object . defineProperty ( obj , key , {
141
143
get : function ( ) {
142
144
var value = values [ key ]
You can’t perform that action at this time.
0 commit comments