@@ -52,8 +52,6 @@ function Compiler (vm, options) {
5252
5353 // copy data, methods & compiler options
5454 var data = compiler . data = options . data || { }
55- extend ( vm , data , true )
56- extend ( vm , options . methods , true )
5755 extend ( compiler , options . compilerOptions )
5856
5957 // initialize element
@@ -92,10 +90,15 @@ function Compiler (vm, options) {
9290 // setup observer
9391 compiler . setupObserver ( )
9492
95- // create bindings for computed properties
96- var computed = options . computed
97- if ( computed ) {
98- for ( key in computed ) {
93+ // create bindings for computed properties and methods
94+ if ( options . methods ) {
95+ for ( key in options . methods ) {
96+ compiler . createBinding ( key )
97+ }
98+ }
99+
100+ if ( options . computed ) {
101+ for ( key in options . computed ) {
99102 compiler . createBinding ( key )
100103 }
101104 }
@@ -105,7 +108,7 @@ function Compiler (vm, options) {
105108 if ( params ) {
106109 i = params . length
107110 while ( i -- ) {
108- vm [ params [ i ] ] = utils . checkNumber (
111+ data [ params [ i ] ] = utils . checkNumber (
109112 compiler . eval (
110113 el . getAttribute ( params [ i ] )
111114 )
@@ -118,7 +121,15 @@ function Compiler (vm, options) {
118121
119122 // the user might have set some props on the vm
120123 // so copy it back to the data...
121- extend ( data , vm )
124+ for ( key in vm ) {
125+ if ( typeof vm [ key ] !== 'function' ) {
126+ data [ key ] = vm [ key ]
127+ }
128+ }
129+
130+ vm . $index = data . $index
131+ vm . $value = data . $value
132+ vm . $key = data . $key
122133
123134 // observe the data
124135 compiler . observeData ( data )
@@ -570,15 +581,19 @@ CompilerProto.createBinding = function (key, directive) {
570581 utils . log ( ' created binding: ' + key )
571582
572583 var compiler = this ,
584+ methods = compiler . options . methods ,
573585 isExp = directive && directive . isExp ,
574- isFn = directive && directive . isFn ,
586+ isFn = ( directive && directive . isFn ) || ( methods && methods [ key ] ) ,
575587 bindings = compiler . bindings ,
576588 computed = compiler . options . computed ,
577589 binding = new Binding ( compiler , key , isExp , isFn )
578590
579591 if ( isExp ) {
580592 // expression bindings are anonymous
581593 compiler . defineExp ( key , binding , directive )
594+ } else if ( isFn ) {
595+ bindings [ key ] = binding
596+ binding . value = compiler . vm [ key ] = methods [ key ]
582597 } else {
583598 bindings [ key ] = binding
584599 if ( binding . root ) {
@@ -653,9 +668,7 @@ CompilerProto.defineProp = function (key, binding) {
653668CompilerProto . defineMeta = function ( key , binding ) {
654669 var vm = this . vm ,
655670 ob = this . observer ,
656- value = binding . value = hasOwn . call ( vm , key )
657- ? vm [ key ]
658- : this . data [ key ]
671+ value = binding . value = vm [ key ]
659672 // remove initital meta in data, since the same piece
660673 // of data can be observed by different VMs, each have
661674 // its own associated meta info.
0 commit comments