Fixes #654 - Bug: components implementing a key attribute break in Marko v4

This commit is contained in:
Patrick Steele-Idem 2017-04-06 15:03:12 -06:00
parent 8019774911
commit 56382307b7
7 changed files with 28 additions and 3 deletions

View File

@ -134,6 +134,11 @@ class Tag{
return attribute;
}
hasAttribute(attrName) {
return this.attributes.hasOwnProperty(attrName);
}
addNestedVariable(nestedVariable) {
if (!this.nestedVariables) {
this.nestedVariables = {
@ -232,4 +237,4 @@ class Tag{
}
}
module.exports = Tag;
module.exports = Tag;

View File

@ -1,7 +1,6 @@
'use strict';
module.exports = function assignComponentId(isRepeated) {
// First check if we have already assigned an ID to thie element
var componentIdInfo = this.componentIdInfo;

View File

@ -1,6 +1,19 @@
'use strict';
var getTransformHelper = require('./util/getTransformHelper');
function tagDefinitionHasOverridingKeyAttribute(el, context) {
if (!el.hasAttribute('key')) {
return false;
}
var tagDef = el.tagDef;
if (tagDef && tagDef.hasAttribute('key')) {
return true;
}
return false;
}
module.exports = function transform(el, context) {
var transformHelper = getTransformHelper(el, context);
@ -61,7 +74,9 @@ module.exports = function transform(el, context) {
}
if (el.hasAttribute('key') || el.hasAttribute('ref') || el.hasAttribute('w-id')) {
transformHelper.assignComponentId();
if (!tagDefinitionHasOverridingKeyAttribute(el, context)) {
transformHelper.assignComponentId();
}
}
if (el.hasAttribute('for-key') || el.hasAttribute('for-ref') || el.hasAttribute('w-for')) {

View File

@ -0,0 +1 @@
<div>Key: ${input.key}</div>

View File

@ -0,0 +1,3 @@
{
"@key": "string"
}

View File

@ -0,0 +1 @@
<div>Key: 123</div>

View File

@ -0,0 +1 @@
<foo key="123"/>