Skip to content

Commit

Permalink
Minor refactors
Browse files Browse the repository at this point in the history
- update Firebase example lib version
- depsParser now depends on Observer instead of the other way around
- transition classes should not be cached
  • Loading branch information
yyx990803 committed Jan 24, 2014
1 parent 6c4818b commit f08debd
Show file tree
Hide file tree
Showing 7 changed files with 26 additions and 25 deletions.
2 changes: 1 addition & 1 deletion examples/firebase/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -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>
Expand Down
5 changes: 2 additions & 3 deletions src/compiler.js
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -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)
Expand Down
13 changes: 7 additions & 6 deletions src/deps-parser.js
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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
Expand All @@ -19,24 +20,24 @@ function catchDeps (binding) {
dep.subs.push(binding)
})
binding.value.$get()
observer.off('get')
catcher.off('get')
}

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.')
}

Expand Down
10 changes: 7 additions & 3 deletions src/observer.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

var Emitter = require('./emitter'),
utils = require('./utils'),
depsOb = require('./deps-parser').observer,

// cache methods
typeOf = utils.typeOf,
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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,
Expand Down
10 changes: 4 additions & 6 deletions src/transition.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
var endEvent = sniffTransitionEndEvent(),
config = require('./config'),
enterClass = config.enterClass,
leaveClass = config.leaveClass,
// exit codes for testing
codes = {
CSS_E : 1,
Expand Down Expand Up @@ -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
Expand Down
4 changes: 2 additions & 2 deletions test/unit/specs/deps-parser.js
Original file line number Diff line number Diff line change
Expand Up @@ -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)
}
Expand All @@ -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])
}
}
}
Expand Down
7 changes: 3 additions & 4 deletions test/unit/specs/observer.js
Original file line number Diff line number Diff line change
@@ -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 () {

Expand Down Expand Up @@ -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: [
Expand All @@ -47,7 +46,7 @@ describe('UNIT: Observer', function () {
],
path: 'test'
})()
DepsOb.active = false
Observer.shouldGet = false
})

it('should emit set when first observing', function () {
Expand Down

0 comments on commit f08debd

Please sign in to comment.