浏览代码

Minor refactors

- update Firebase example lib version
- depsParser now depends on Observer instead of the other way around
- transition classes should not be cached
Evan You 12 年之前
父节点
当前提交
f08debd6ee
共有 7 个文件被更改,包括 26 次插入25 次删除
  1. 1 1
      examples/firebase/index.html
  2. 2 3
      src/compiler.js
  3. 7 6
      src/deps-parser.js
  4. 7 3
      src/observer.js
  5. 4 6
      src/transition.js
  6. 2 2
      test/unit/specs/deps-parser.js
  7. 3 4
      test/unit/specs/observer.js

+ 1 - 1
examples/firebase/index.html

@@ -4,7 +4,7 @@
         <title></title>
         <meta charset="utf-8">
         <link rel="stylesheet" type="text/css" href="style.css">
-        <script src='https://cdn.firebase.com/v0/firebase.js'></script>
+        <script src='https://cdn.firebase.com/js/client/1.0.2/firebase.js'></script>
         <script src="../../dist/vue.js"></script>
     </head>
     <body>

+ 2 - 3
src/compiler.js

@@ -7,8 +7,7 @@ var Emitter     = require('./emitter'),
     TextParser  = require('./text-parser'),
     DepsParser  = require('./deps-parser'),
     ExpParser   = require('./exp-parser'),
-    // cache deps ob
-    depsOb      = DepsParser.observer,
+    
     // cache methods
     slice       = Array.prototype.slice,
     log         = utils.log,
@@ -183,7 +182,7 @@ CompilerProto.setupObserver = function () {
     observer
         .on('get', function (key) {
             check(key)
-            depsOb.emit('get', bindings[key])
+            DepsParser.catcher.emit('get', bindings[key])
         })
         .on('set', function (key, val) {
             observer.emit('change:' + key, val)

+ 7 - 6
src/deps-parser.js

@@ -1,6 +1,7 @@
 var Emitter  = require('./emitter'),
     utils    = require('./utils'),
-    observer = new Emitter()
+    Observer = require('./observer'),
+    catcher  = new Emitter()
 
 /**
  *  Auto-extract the dependencies of a computed property
@@ -10,7 +11,7 @@ function catchDeps (binding) {
     if (binding.isFn) return
     utils.log('\n- ' + binding.key)
     var got = utils.hash()
-    observer.on('get', function (dep) {
+    catcher.on('get', function (dep) {
         var has = got[dep.key]
         if (has && has.compiler === dep.compiler) return
         got[dep.key] = dep
@@ -19,7 +20,7 @@ function catchDeps (binding) {
         dep.subs.push(binding)
     })
     binding.value.$get()
-    observer.off('get')
+    catcher.off('get')
 }
 
 module.exports = {
@@ -27,16 +28,16 @@ module.exports = {
     /**
      *  the observer that catches events triggered by getters
      */
-    observer: observer,
+    catcher: catcher,
 
     /**
      *  parse a list of computed property bindings
      */
     parse: function (bindings) {
         utils.log('\nparsing dependencies...')
-        observer.active = true
+        Observer.shouldGet = true
         bindings.forEach(catchDeps)
-        observer.active = false
+        Observer.shouldGet = false
         utils.log('\ndone.')
     }
     

+ 7 - 3
src/observer.js

@@ -2,7 +2,6 @@
 
 var Emitter  = require('./emitter'),
     utils    = require('./utils'),
-    depsOb   = require('./deps-parser').observer,
 
     // cache methods
     typeOf   = utils.typeOf,
@@ -143,7 +142,7 @@ function convert (obj, key) {
         get: function () {
             var value = values[key]
             // only emit get on tip values
-            if (depsOb.active && typeOf(value) !== OBJECT) {
+            if (pub.shouldGet && typeOf(value) !== OBJECT) {
                 observer.emit('get', key)
             }
             return value
@@ -304,7 +303,12 @@ function unobserve (obj, path, observer) {
     observer.proxies[path] = null
 }
 
-module.exports = {
+var pub = module.exports = {
+
+    // whether to emit get events
+    // only enabled during dependency parsing
+    shouldGet   : false,
+
     observe     : observe,
     unobserve   : unobserve,
     ensurePath  : ensurePath,

+ 4 - 6
src/transition.js

@@ -1,7 +1,5 @@
 var endEvent   = sniffTransitionEndEvent(),
     config     = require('./config'),
-    enterClass = config.enterClass,
-    leaveClass = config.leaveClass,
     // exit codes for testing
     codes = {
         CSS_E     : 1,
@@ -80,27 +78,27 @@ function applyTransitionClass (el, stage, changeState) {
         }
 
         // set to hidden state before appending
-        classList.add(enterClass)
+        classList.add(config.enterClass)
         // append
         changeState()
         // force a layout so transition can be triggered
         /* jshint unused: false */
         var forceLayout = el.clientHeight
         // trigger transition
-        classList.remove(enterClass)
+        classList.remove(config.enterClass)
         return codes.CSS_E
 
     } else { // leave
 
         // trigger hide transition
-        classList.add(leaveClass)
+        classList.add(config.leaveClass)
         var onEnd = function (e) {
             if (e.target === el) {
                 el.removeEventListener(endEvent, onEnd)
                 el.vue_trans_cb = null
                 // actually remove node here
                 changeState()
-                classList.remove(leaveClass)
+                classList.remove(config.leaveClass)
             }
         }
         // attach transition end listener

+ 2 - 2
test/unit/specs/deps-parser.js

@@ -6,7 +6,7 @@ describe('UNIT: Dependency Parser', function () {
 
         // mock the bidnings...
         var bindings = [],
-            ob = DepsParser.observer
+            catcher = DepsParser.catcher
         for (var i = 0; i < 10; i++) {
             mockBinding(i)
         }
@@ -20,7 +20,7 @@ describe('UNIT: Dependency Parser', function () {
                 value: {
                     $get: function () {
                         if (i > 0) {
-                            ob.emit('get', bindings[b.depId])
+                            catcher.emit('get', bindings[b.depId])
                         }
                     }
                 }

+ 3 - 4
test/unit/specs/observer.js

@@ -1,8 +1,7 @@
 describe('UNIT: Observer', function () {
 
     var Observer = require('vue/src/observer'),
-        Emitter  = require('emitter'),
-        DepsOb   = require('vue/src/deps-parser').observer
+        Emitter  = require('emitter')
     
     describe('Observing Object', function () {
 
@@ -38,7 +37,7 @@ describe('UNIT: Observer', function () {
         }))
 
         it('should emit get events on tip values', function () {
-            DepsOb.active = true
+            Observer.shouldGet = true
             getTestFactory({
                 obj: { a: 1, b: { c: 2 } },
                 expects: [
@@ -47,7 +46,7 @@ describe('UNIT: Observer', function () {
                 ],
                 path: 'test'
             })()
-            DepsOb.active = false
+            Observer.shouldGet = false
         })
 
         it('should emit set when first observing', function () {