Sfoglia il codice sorgente

tests for jQuery change event support

Evan You 11 anni fa
parent
commit
a06c602c37

+ 2 - 1
.jshintrc

@@ -15,6 +15,7 @@
   "globals": {
     "console": true,
     "DocumentFragment": true,
-    "WebkitMutationObserver": true
+    "WebkitMutationObserver": true,
+    "jQuery": true
   }
 }

+ 1 - 0
gruntfile.js

@@ -40,6 +40,7 @@ module.exports = function (grunt) {
       options: {
         frameworks: ['jasmine', 'commonjs'],
         files: [
+          'test/unit/lib/jquery.js',
           'src/**/*.js',
           'test/unit/lib/indoc_patch.js',
           'test/unit/specs/**/*.js'

+ 8 - 1
src/directives/model/default.js

@@ -1,4 +1,5 @@
 var _ = require('../../util')
+var hasjQuery = typeof jQuery === 'function'
 
 module.exports = {
 
@@ -80,7 +81,10 @@ module.exports = {
 
     this.event = lazy ? 'change' : 'input'
     _.on(el, this.event, this.listener)
-    if (typeof(jQuery) === 'function') {
+
+    // support jQuery change event, jQuery.trigger() doesn't
+    // trigger native change event in some cases
+    if (hasjQuery) {
       jQuery(el).on('change', this.listener)
     }
 
@@ -116,6 +120,9 @@ module.exports = {
   unbind: function () {
     var el = this.el
     _.off(el, this.event, this.listener)
+    if (hasjQuery) {
+      jQuery(el).off('change', this.listener)
+    }
     _.off(el,'compositionstart', this.cpLock)
     _.off(el,'compositionend', this.cpUnlock)
     if (this.onCut) {

File diff suppressed because it is too large
+ 1 - 0
test/unit/lib/jquery.js


+ 23 - 0
test/unit/specs/directives/model_spec.js

@@ -569,5 +569,28 @@ if (_.inBrowser) {
       expect(_.warn).toHaveBeenCalled()
     })
 
+    it('support jQuery change event', function (done) {
+      var vm = new Vue({
+        el: el,
+        data: {
+          test: 'b'
+        },
+        template: '<input v-model="test">'
+      })
+      expect(el.firstChild.value).toBe('b')
+      vm.test = 'a'
+      _.nextTick(function () {
+        expect(el.firstChild.value).toBe('a')
+        el.firstChild.value = 'c'
+        jQuery(el.firstChild).trigger('change')
+        expect(vm.test).toBe('c')
+        vm._directives[0].unbind()
+        el.firstChild.value = 'd'
+        jQuery(el.firstChild).trigger('change')
+        expect(vm.test).toBe('c')
+        done()
+      })
+    })
+
   })
 }

Some files were not shown because too many files changed in this diff