fix indirectly bound values on elements with spreads

pull/4398/head
Conduitry 6 years ago
parent c3232826d4
commit 3bb8311a34

@ -39,20 +39,25 @@ export default class AttributeWrapper {
} }
} }
render(block: Block) { is_indirectly_bound_value() {
const element = this.parent; const element = this.parent;
const name = fix_attribute_casing(this.node.name); const name = fix_attribute_casing(this.node.name);
return name === 'value' &&
const metadata = this.get_metadata();
const is_indirectly_bound_value =
name === 'value' &&
(element.node.name === 'option' || // TODO check it's actually bound (element.node.name === 'option' || // TODO check it's actually bound
(element.node.name === 'input' && (element.node.name === 'input' &&
element.node.bindings.find( element.node.bindings.some(
(binding) => (binding) =>
/checked|group/.test(binding.name) /checked|group/.test(binding.name)
))); )));
}
render(block: Block) {
const element = this.parent;
const name = fix_attribute_casing(this.node.name);
const metadata = this.get_metadata();
const is_indirectly_bound_value = this.is_indirectly_bound_value();
const property_name = is_indirectly_bound_value const property_name = is_indirectly_bound_value
? '__value' ? '__value'

@ -679,10 +679,10 @@ export default class ElementWrapper extends Wrapper {
updates.push(condition ? x`${condition} && ${snippet}` : snippet); updates.push(condition ? x`${condition} && ${snippet}` : snippet);
} else { } else {
const metadata = attr.get_metadata(); const metadata = attr.get_metadata();
const snippet = x`{ ${ const name = attr.is_indirectly_bound_value()
(metadata && metadata.property_name) || ? '__value'
fix_attribute_casing(attr.node.name) : (metadata && metadata.property_name) || fix_attribute_casing(attr.node.name);
}: ${attr.get_value(block)} }`; const snippet = x`{ ${name}: ${attr.get_value(block)} }`;
initial_props.push(snippet); initial_props.push(snippet);
updates.push(condition ? x`${condition} && ${snippet}` : snippet); updates.push(condition ? x`${condition} && ${snippet}` : snippet);

@ -98,7 +98,7 @@ export function set_attributes(node: Element & ElementCSSInlineStyle, attributes
node.removeAttribute(key); node.removeAttribute(key);
} else if (key === 'style') { } else if (key === 'style') {
node.style.cssText = attributes[key]; node.style.cssText = attributes[key];
} else if (descriptors[key] && descriptors[key].set) { } else if (key === '__value' || descriptors[key] && descriptors[key].set) {
node[key] = attributes[key]; node[key] = attributes[key];
} else { } else {
attr(node, key, attributes[key]); attr(node, key, attributes[key]);

Loading…
Cancel
Save