Evan You 11 лет назад
Родитель
Сommit
f9299e1f15
6 измененных файлов с 21 добавлено и 17 удалено
  1. 1 1
      src/api/lifecycle.js
  2. 1 1
      src/directives/repeat.js
  3. 4 5
      src/emitter.js
  4. 4 1
      src/instance/events.js
  5. 11 7
      src/instance/init.js
  6. 0 2
      src/instance/scope.js

+ 1 - 1
src/api/lifecycle.js

@@ -24,7 +24,7 @@ exports.$mount = function (el) {
     this._isAttached = true
     this._isReady = true
     this._callHook('ready')
-    // this._initDOMHooks()
+    this._initDOMHooks()
   })
   if (_.inDoc(this.$el)) {
     this._callHook('attached')

+ 1 - 1
src/directives/repeat.js

@@ -306,7 +306,7 @@ module.exports = {
    */
 
   cacheVm: function (data, vm) {
-    if (data[this.id] !== undefined) {
+    if (data.hasOwnProperty(this.id)) {
       data[this.id] = vm
     } else {
       _.define(data, this.id, vm)

+ 4 - 5
src/emitter.js

@@ -25,7 +25,7 @@ var p = Emitter.prototype
 p.on = function (event, fn) {
   this._cbs = this._cbs || {}
   ;(this._cbs[event] || (this._cbs[event] = []))
-    .unshift(fn)
+    .push(fn)
   return this
 }
 
@@ -100,9 +100,8 @@ p.emit = function (event, a, b, c, d) {
   var callbacks = this._cbs[event]
   if (callbacks) {
     callbacks = _.toArray(callbacks)
-    var i = callbacks.length
     var ctx = this._ctx
-    while (i--) {
+    for (var i = 0, l = callbacks.length; i < l; i++) {
       callbacks[i].call(ctx, a, b, c, d)
     }
   }
@@ -130,8 +129,8 @@ p.applyEmit = function (event) {
       args[i] = arguments[i + 1]
     }
     callbacks = _.toArray(callbacks)
-    i = callbacks.length
-    while (i--) {
+    i = 0
+    for (var l = callbacks.length; i < l; i++) {
       if (callbacks[i].apply(this._ctx, args) === false) {
         this._cancelled = true
       }

+ 4 - 1
src/instance/events.js

@@ -29,9 +29,10 @@ exports._initEvents = function () {
  */
 
 exports._initDOMHooks = function () {
-  var children = this._children
   this.$on('hook:attached', function () {
     this._isAttached = true
+    var children = this._children
+    if (!children) return
     for (var i = 0, l = children.length; i < l; i++) {
       var child = children[i]
       if (!child._isAttached && inDoc(child.$el)) {
@@ -41,6 +42,8 @@ exports._initDOMHooks = function () {
   })
   this.$on('hook:detached', function () {
     this._isAttached = false
+    var children = this._children
+    if (!children) return
     for (var i = 0, l = children.length; i < l; i++) {
       var child = children[i]
       if (child._isAttached && !inDoc(child.$el)) {

+ 11 - 7
src/instance/init.js

@@ -20,23 +20,27 @@ exports._init = function (options) {
   this.$            = {}
   this.$root        = this.$root || this
   this._data        = options.data || {}
-  this._rawContent  = null
   this._emitter     = new Emitter(this)
   this._watchers    = {}
-  this._activeWatcher = null
   this._directives  = []
+  this._rawContent  = null
+  this._activeWatcher = null
 
   // block instance properties
-  this._isBlock     = false
-  this._blockStart  = null
+  this._blockStart  =
   this._blockEnd    = null
+  this._isBlock     = false
 
   // lifecycle state
-  this._isCompiled  = false
-  this._isDestroyed = false
-  this._isReady     = false
+  this._isCompiled  =
+  this._isDestroyed =
+  this._isReady     =
   this._isAttached  = false
 
+  // children
+  this._children =
+  this._childCtors = null
+
   // anonymous instances are created by flow-control
   // directives such as v-if and v-repeat
   this._isAnonymous = options.anonymous

+ 0 - 2
src/instance/scope.js

@@ -18,8 +18,6 @@ var allEvents = ['get', 'set', 'mutate', 'add', 'delete', 'add:self', 'delete:se
  */
 
 exports._initScope = function () {
-  this._children = null
-  this._childCtors = null
   this._initObserver()
   this._initData()
   this._initComputed()