Evan You 11 лет назад
Родитель
Сommit
3097271586
2 измененных файлов с 14 добавлено и 11 удалено
  1. 8 3
      src/compile/compile.js
  2. 6 8
      src/directives/repeat.js

+ 8 - 3
src/compile/compile.js

@@ -1,11 +1,9 @@
 var _ = require('../util')
 var _ = require('../util')
 var config = require('../config')
 var config = require('../config')
-var transclude = require('./transclude')
 var Direcitve = require('../directive')
 var Direcitve = require('../directive')
 var textParser = require('../parse/text')
 var textParser = require('../parse/text')
 var dirParser = require('../parse/directive')
 var dirParser = require('../parse/directive')
 var templateParser = require('../parse/template')
 var templateParser = require('../parse/template')
-var mergeOptions = require('../util/merge-option')
 
 
 function noop () {}
 function noop () {}
 
 
@@ -378,9 +376,16 @@ function checkTerminalDirectives (el, options) {
 function makeTeriminalLinkFn (el, dirName, value, options) {
 function makeTeriminalLinkFn (el, dirName, value, options) {
   var descriptor = dirParser.parse(value)[0]
   var descriptor = dirParser.parse(value)[0]
   var def = options.directives[dirName]
   var def = options.directives[dirName]
+  if (
+    dirName === 'repeat' &&
+    !el.hasAttribute(config.prefix + 'component')
+  ) {
+    // optimize for simple repeats
+    var linker = compile(el, options)
+  }
   return function terminalLinkFn (vm, el) {
   return function terminalLinkFn (vm, el) {
     vm._directives.push(
     vm._directives.push(
-      new Direcitve(dirName, el, vm, descriptor, def)
+      new Direcitve(dirName, el, vm, descriptor, def, linker)
     )
     )
   }
   }
 }
 }

+ 6 - 8
src/directives/repeat.js

@@ -82,8 +82,12 @@ module.exports = {
     } else {
     } else {
       var tokens = textParser.parse(id)
       var tokens = textParser.parse(id)
       if (!tokens) { // static component
       if (!tokens) { // static component
-        this.Ctor = this.vm.$options.components[id]
-        _.assertAsset(this.Ctor, 'component', id)
+        var Ctor = this.Ctor = this.vm.$options.components[id]
+        _.assertAsset(Ctor, 'component', id)
+        if (Ctor) {
+          this.el = transclude(this.el, Ctor.options)
+          this._linker = compile(this.el, Ctor.options)
+        }
       } else if (tokens.length === 1) {
       } else if (tokens.length === 1) {
         // to be resolved later
         // to be resolved later
         this.CtorExp = tokens[0].value
         this.CtorExp = tokens[0].value
@@ -96,12 +100,6 @@ module.exports = {
         )
         )
       }
       }
     }
     }
-    // pre-compile if we have determined Ctor
-    var Ctor = this.Ctor
-    if (Ctor) {
-      this.el = transclude(this.el, Ctor.options)
-      this._linker = compile(this.el, Ctor.options)
-    }
   },
   },
 
 
   /**
   /**