Преглед изворни кода

fix sd-model selection position issue

Evan You пре 12 година
родитељ
комит
3eba564120
1 измењених фајлова са 24 додато и 3 уклоњено
  1. 24 3
      src/directives/model.js

+ 24 - 3
src/directives/model.js

@@ -26,9 +26,29 @@ module.exports = {
             : 'value'
             : 'value'
 
 
         // attach listener
         // attach listener
-        self.set = function () {
-            self.vm.$set(self.key, el[attr])
-        }
+        self.set = self.filters
+            ? function () {
+                // if this directive has filters
+                // we need to let the vm.$set trigger
+                // update() so filters are applied.
+                // therefore we have to record cursor position
+                // so that after vm.$set changes the input
+                // value we can put the cursor back at where it is
+                var cursorPos
+                try {
+                    cursorPos = el.selectionStart
+                } catch (e) {}
+                self.vm.$set(self.key, el[attr])
+                if (cursorPos !== undefined) {
+                    el.setSelectionRange(cursorPos, cursorPos)
+                }
+            }
+            : function () {
+                // no filters, don't let it trigger update()
+                self.lock = true
+                self.vm.$set(self.key, el[attr])
+                self.lock = false
+            }
         el.addEventListener(self.event, self.set)
         el.addEventListener(self.event, self.set)
 
 
         // fix shit for IE9
         // fix shit for IE9
@@ -51,6 +71,7 @@ module.exports = {
     },
     },
 
 
     update: function (value) {
     update: function (value) {
+        if (this.lock) return
         /* jshint eqeqeq: false */
         /* jshint eqeqeq: false */
         var self = this,
         var self = this,
             el   = self.el
             el   = self.el