|
|
@@ -33,20 +33,49 @@ module.exports = {
|
|
|
value: data
|
|
|
})
|
|
|
var unlink = linker(vm, el, host, scope)
|
|
|
- var f = {
|
|
|
- el: el,
|
|
|
- unlink: unlink
|
|
|
- }
|
|
|
- return f
|
|
|
+ return new Fragment(el, unlink)
|
|
|
}
|
|
|
},
|
|
|
|
|
|
update: function (list) {
|
|
|
if (!list) debugger
|
|
|
var anchor = this.end
|
|
|
- var create = this.create
|
|
|
- list.forEach(function (item) {
|
|
|
- _.before(create(item).el, anchor)
|
|
|
+ if (this.frags) {
|
|
|
+ this.frags.forEach(function (f) {
|
|
|
+ f.destroy()
|
|
|
+ })
|
|
|
+ }
|
|
|
+ this.frags = list.map(this.create)
|
|
|
+ this.frags.forEach(function (f) {
|
|
|
+ f.before(anchor)
|
|
|
})
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+function Fragment (el, unlink) {
|
|
|
+ this.start = _.createAnchor('fragment')
|
|
|
+ this.end = _.createAnchor('fragment')
|
|
|
+ this.frag = el
|
|
|
+ this.unlink = unlink
|
|
|
+}
|
|
|
+
|
|
|
+Fragment.prototype.before = function (target) {
|
|
|
+ _.before(this.start, target)
|
|
|
+ _.before(this.frag, target)
|
|
|
+ _.before(this.end, target)
|
|
|
+}
|
|
|
+
|
|
|
+Fragment.prototype.remove = function () {
|
|
|
+ var parent = this.start.parentNode
|
|
|
+ var node = this.start.nextSibling
|
|
|
+ while (node !== this.end) {
|
|
|
+ this.frag.appendChild(node)
|
|
|
+ }
|
|
|
+ parent.removeChild(this.start)
|
|
|
+ parent.removeChild(this.end)
|
|
|
+}
|
|
|
+
|
|
|
+Fragment.prototype.destroy = function () {
|
|
|
+ this.remove()
|
|
|
+ this.unlink()
|
|
|
+}
|