Просмотр исходного кода

move try catch to watcher.get/set so that other errors can be thrown

Evan You 11 лет назад
Родитель
Сommit
1e8b525f0b
3 измененных файлов с 11 добавлено и 11 удалено
  1. 2 9
      src/parse/expression.js
  2. 7 2
      src/watcher.js
  3. 2 0
      test/unit/specs/watcher_spec.js

+ 2 - 9
src/parse/expression.js

@@ -151,10 +151,7 @@ function compilePathFns (exp) {
 
 function makeGetter (body) {
   try {
-    return new Function(
-      'scope',
-      '"use strict";try{return ' + body + '}catch(e){};'
-    )
+    return new Function('scope', 'return ' + body + ';')
   } catch (e) {
     _.warn(
       'Invalid expression. ' + 
@@ -179,11 +176,7 @@ function makeGetter (body) {
 
 function makeSetter (body) {
   try {
-    return new Function(
-      'scope',
-      'value',
-      '"use strict";' + body + ' = value;'
-    )
+    return new Function('scope', 'value', body + '=value;')
   } catch (e) {
     _.warn('Invalid setter function body: ' + body)
   }

+ 7 - 2
src/watcher.js

@@ -68,7 +68,10 @@ p.addDep = function (binding) {
 p.get = function () {
   this.beforeGet()
   var vm = this.vm
-  var value = this.getter.call(vm, vm)
+  var value
+  try {
+    value = this.getter.call(vm, vm)
+  } catch (e) {}
   // use JSON.stringify to "touch" every property
   // so they are all tracked as dependencies for
   // deep watching
@@ -89,7 +92,9 @@ p.set = function (value) {
   value = _.applyFilters(
     value, this.writeFilters, vm, this.value
   )
-  this.setter.call(vm, vm, value)
+  try {
+    this.setter.call(vm, vm, value)
+  } catch (e) {}
 }
 
 /**

+ 2 - 0
test/unit/specs/watcher_spec.js

@@ -2,6 +2,7 @@ var Vue = require('../../../src/vue')
 var nextTick = Vue.nextTick
 var Watcher = require('../../../src/watcher')
 var _ = Vue.util
+var config = Vue.config
 
 describe('Watcher', function () {
 
@@ -20,6 +21,7 @@ describe('Watcher', function () {
       }
     })
     spy = jasmine.createSpy('watcher')
+    spyOn(_, 'warn')
   })
   
   it('simple path', function (done) {