fix some binding tests

pull/1864/head
Rich Harris 7 years ago
parent 2bd3ccc12c
commit 8e6084d135

@ -153,7 +153,8 @@ export default class BindingWrapper {
return { return {
name: this.node.name, name: this.node.name,
object: name, object: name,
handler: handler, handler,
snippet,
usesContext: handler.usesContext, usesContext: handler.usesContext,
updateDom: updateDom, updateDom: updateDom,
initialUpdate: initialUpdate, initialUpdate: initialUpdate,
@ -281,7 +282,8 @@ function getValueFromDom(
if (name === 'group') { if (name === 'group') {
const bindingGroup = getBindingGroup(renderer, binding.node.expression.node); const bindingGroup = getBindingGroup(renderer, binding.node.expression.node);
if (type === 'checkbox') { if (type === 'checkbox') {
return `@getBindingGroupValue(#component.$$bindingGroups[${bindingGroup}])`; renderer.component.init_uses_self = true;
return `@getBindingGroupValue($$self.$$bindingGroups[${bindingGroup}])`;
} }
return `this.__value`; return `this.__value`;

@ -540,15 +540,15 @@ export default class ElementWrapper extends Wrapper {
} }
}); });
const allInitialStateIsDefined = group.bindings const someInitialStateIsUndefined = group.bindings
.map(binding => `'${binding.object}' in ctx`) .map(binding => `${binding.snippet} === void 0`)
.join(' && '); .join(' || ');
if (this.node.name === 'select' || group.bindings.find(binding => binding.name === 'indeterminate' || binding.isReadOnlyMediaAttribute)) { if (this.node.name === 'select' || group.bindings.find(binding => binding.name === 'indeterminate' || binding.isReadOnlyMediaAttribute)) {
renderer.hasComplexBindings = true; renderer.hasComplexBindings = true;
block.builders.hydrate.addLine( block.builders.hydrate.addLine(
`if (!(${allInitialStateIsDefined})) #component.$$root._beforecreate.push(${handler});` `if (${someInitialStateIsUndefined}) @after_render(() => ${callee}.call(${this.var}));`
); );
} }
@ -556,7 +556,7 @@ export default class ElementWrapper extends Wrapper {
renderer.hasComplexBindings = true; renderer.hasComplexBindings = true;
block.builders.hydrate.addLine( block.builders.hydrate.addLine(
`#component.$$root._beforecreate.push(${handler});` `@after_render(() => ${callee}.call(${this.var}));`
); );
} }
}); });

@ -14,7 +14,7 @@
</script> </script>
<select bind:value={selected.letter}> <select bind:value={selected.letter}>
{#each uppercase as letter} {#each uppercase() as letter}
<option value="{letter}">{letter}</option> <option value="{letter}">{letter}</option>
{/each} {/each}
</select> </select>

@ -5,6 +5,8 @@ const values = [
]; ];
export default { export default {
solo: 1,
props: { props: {
values, values,
selected: values[1] selected: values[1]
@ -25,7 +27,7 @@ export default {
<p>Beta</p>`, <p>Beta</p>`,
test ( assert, component, target, window ) { async test(assert, component, target, window) {
const inputs = target.querySelectorAll('input'); const inputs = target.querySelectorAll('input');
assert.equal(inputs[0].checked, false); assert.equal(inputs[0].checked, false);
assert.equal(inputs[1].checked, true); assert.equal(inputs[1].checked, true);
@ -34,7 +36,7 @@ export default {
const event = new window.Event('change'); const event = new window.Event('change');
inputs[0].checked = true; inputs[0].checked = true;
inputs[0].dispatchEvent( event ); await inputs[0].dispatchEvent(event);
assert.htmlEqual(target.innerHTML, ` assert.htmlEqual(target.innerHTML, `
<label> <label>

Loading…
Cancel
Save