Skip to content

Commit 430eefb

Browse files
committed
fix: Refactor rendering logic and handling of undefined key
1 parent 4171181 commit 430eefb

File tree

1 file changed

+25
-9
lines changed

1 file changed

+25
-9
lines changed

src/index.js

+25-9
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ function render({ source, element, data, key, index, currentIndex, update, remov
9696
renderedNode.clones.delete(clone[0])
9797
renderedNodes.delete(clone[1])
9898
clone[1].remove()
99-
} else if (key) {
99+
} else if (key || Array.isArray(data)) {
100100
if (update) {
101101
let clone
102102

@@ -119,7 +119,8 @@ function render({ source, element, data, key, index, currentIndex, update, remov
119119
if (key === '$auto')
120120
key = key.replace(/\$auto/g, uuid.generate(6));
121121

122-
element[i].setAttribute('render', key);
122+
if (key)
123+
element[i].setAttribute('render', key);
123124

124125
renderTemplate(element[i], data, key, index);
125126
} else
@@ -154,7 +155,12 @@ function renderTemplate(template, data, key, index, keyPath) {
154155

155156
template = templateData
156157

157-
let renderData = getRenderValue(template.element, data, key)
158+
let renderData
159+
if (key)
160+
renderData = getRenderValue(template.element, data, key)
161+
else if (Array.isArray(data))
162+
renderData = data
163+
158164
if (!renderData) return
159165

160166
if (index === 0) {
@@ -211,7 +217,7 @@ function renderTemplate(template, data, key, index, keyPath) {
211217

212218
}
213219
} else {
214-
if (!key) {
220+
if (!key && !Array.isArray(renderData)) {
215221
key = 'data'
216222
renderData = getValueFromObject(renderData, key);
217223
if (!renderAs)
@@ -229,10 +235,16 @@ function renderTemplate(template, data, key, index, keyPath) {
229235

230236
for (let i = 0; i < renderData.length; i++) {
231237
let clone = cloneTemplate(template);
232-
clone.keyPath = template.keyPath + `[${i}]`
233-
let object = { [renderAs]: renderData[i] }
234-
if (renderAs.includes('.'))
235-
object = dotNotationToObject(object);
238+
clone.keyPath = template.keyPath || '' + `[${i}]`
239+
240+
let object
241+
if (renderAs) {
242+
object = { [renderAs]: renderData[i] }
243+
if (renderAs.includes('.'))
244+
object = dotNotationToObject(object);
245+
} else
246+
object = renderData[i]
247+
236248
renderValues(clone.element, object, key, renderAs);
237249
insertElement(template, clone.element, index);
238250
}
@@ -332,7 +344,11 @@ function renderValues(node, data, key, renderAs, keyPath, parent) {
332344
parent = renderedNode
333345

334346
for (let eid of ['_id', 'name', 'key']) {
335-
eid = data[renderAs][eid]
347+
if (renderAs)
348+
eid = data[renderAs][eid]
349+
else
350+
eid = data[eid]
351+
336352
if (!eid) continue
337353

338354
let oldEid = renderedNode.eid

0 commit comments

Comments
 (0)