Skip to content

Commit 5fa908d

Browse files
committed
sd-id
1 parent 094a1fe commit 5fa908d

File tree

3 files changed

+84
-7
lines changed

3 files changed

+84
-7
lines changed

Diff for: examples/child-id.html

+31
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
<!DOCTYPE html>
2+
<html lang="en">
3+
<head>
4+
<title></title>
5+
<meta charset="utf-8">
6+
<script src="../dist/seed.js"></script>
7+
</head>
8+
<body>
9+
<div id="parent">
10+
<div sd-id="child" sd-viewmodel="child">
11+
{{msg}}
12+
</div>
13+
</div>
14+
<script>
15+
Seed.viewmodel('child', Seed.extend({
16+
init: function () {
17+
console.log('child init!')
18+
},
19+
proto: {
20+
hi: function () {
21+
console.log('hi from child!')
22+
}
23+
},
24+
scope: {
25+
msg: 'I am a child'
26+
}
27+
}))
28+
var app = new Seed({el:'#parent'})
29+
</script>
30+
</body>
31+
</html>

Diff for: examples/simple-dir.html

+30
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
<!DOCTYPE html>
2+
<html lang="en">
3+
<head>
4+
<title></title>
5+
<meta charset="utf-8">
6+
<script src="../dist/seed.js"></script>
7+
</head>
8+
<body>
9+
<div id="hi" sd-test sd-test2></div>
10+
<script>
11+
var a = new Seed({
12+
el: '#hi',
13+
directives: {
14+
test: {
15+
bind: function () {
16+
console.log('bind')
17+
},
18+
unbind: function () {
19+
console.log('unbind')
20+
}
21+
},
22+
test2: function () {
23+
console.log('test2 bind')
24+
}
25+
}
26+
})
27+
a.$destroy()
28+
</script>
29+
</body>
30+
</html>

Diff for: src/compiler.js

+23-7
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,20 @@ var Emitter = require('./emitter'),
77
TextParser = require('./text-parser'),
88
DepsParser = require('./deps-parser'),
99
ExpParser = require('./exp-parser'),
10+
11+
// cache methods
1012
slice = Array.prototype.slice,
1113
log = utils.log,
1214
def = utils.defProtected,
15+
16+
// special directives
17+
idAttr,
1318
vmAttr,
19+
preAttr,
1420
repeatAttr,
1521
partialAttr,
16-
transitionAttr,
17-
preAttr
22+
transitionAttr
23+
1824

1925
/**
2026
* The DOM compiler
@@ -40,8 +46,9 @@ function Compiler (vm, options) {
4046

4147
compiler.vm = vm
4248
// special VM properties are inumerable
43-
def(vm, '$compiler', compiler)
49+
def(vm, '$', {})
4450
def(vm, '$el', compiler.el)
51+
def(vm, '$compiler', compiler)
4552

4653
// keep track of directives and expressions
4754
// so they can be unbound during destroy()
@@ -65,6 +72,12 @@ function Compiler (vm, options) {
6572
? getRoot(parent)
6673
: compiler
6774

75+
// register child id on parent
76+
var childId = compiler.el.getAttribute(idAttr)
77+
if (childId && parent) {
78+
parent.vm.$[childId] = vm
79+
}
80+
6881
// setup observer
6982
compiler.setupObserver()
7083

@@ -182,12 +195,14 @@ CompilerProto.compile = function (node, root) {
182195
if (node.nodeType === 1) {
183196
// a normal node
184197
if (node.hasAttribute(preAttr)) return
185-
var repeatExp = node.getAttribute(repeatAttr),
186-
vmId = node.getAttribute(vmAttr),
198+
var vmId = node.getAttribute(vmAttr),
199+
repeatExp = node.getAttribute(repeatAttr),
187200
partialId = node.getAttribute(partialAttr)
188201
// we need to check for any possbile special directives
189202
// e.g. sd-repeat, sd-viewmodel & sd-partial
190203
if (repeatExp) { // repeat block
204+
// repeat block cannot have sd-id at the same time.
205+
node.removeAttribute(idAttr)
191206
var directive = Directive.parse(repeatAttr, repeatExp, compiler, node)
192207
if (directive) {
193208
compiler.bindDirective(directive)
@@ -592,11 +607,12 @@ CompilerProto.destroy = function () {
592607
*/
593608
function refreshPrefix () {
594609
var prefix = config.prefix
595-
repeatAttr = prefix + '-repeat'
610+
idAttr = prefix + '-id'
596611
vmAttr = prefix + '-viewmodel'
612+
preAttr = prefix + '-pre'
613+
repeatAttr = prefix + '-repeat'
597614
partialAttr = prefix + '-partial'
598615
transitionAttr = prefix + '-transition'
599-
preAttr = prefix + '-pre'
600616
}
601617

602618
/**

0 commit comments

Comments
 (0)