Browse Source

fix expression fns with filters

Evan You 11 years ago
parent
commit
9562b7a388
2 changed files with 22 additions and 4 deletions
  1. 10 2
      src/directive.js
  2. 12 2
      test/unit/specs/directive_spec.js

+ 10 - 2
src/directive.js

@@ -130,9 +130,17 @@ p._checkExpFn = function () {
   ) {
     var fn = expParser.parse(expression).get
     var vm = this.vm
-    this.update(function () {
+    var handler = function () {
       fn.call(vm, vm)
-    })
+    }
+    if (this.filters) {
+      handler = _.applyFilters(
+        handler,
+        this.filters.read,
+        vm
+      )
+    }
+    this.update(handler)
     return true
   }
 }

+ 12 - 2
test/unit/specs/directive_spec.js

@@ -97,8 +97,18 @@ describe('Directive', function () {
 
   it('expression function', function () {
     def.isFn = true
+    var spy = jasmine.createSpy()
+    vm.$options.filters.test = function (fn) {
+      spy()
+      return function () {
+        // call it twice
+        fn()
+        fn()
+      }
+    }
     var d = new Directive('test', el, vm, {
-      expression: 'a++'
+      expression: 'a++',
+      filters: [{name:'test'}]
     }, def)
     expect(d._watcher).toBeUndefined()
     expect(d.bind).toHaveBeenCalled()
@@ -106,7 +116,7 @@ describe('Directive', function () {
     expect(typeof wrappedFn).toBe('function')
     // test invoke the wrapped fn
     wrappedFn()
-    expect(vm.a).toBe(2)
+    expect(vm.a).toBe(3)
   })
 
   it('two-way', function (done) {