diff --git a/src/generators/dom/visitors/Element/Binding.ts b/src/generators/dom/visitors/Element/Binding.ts
index 37482f19864a..4979340b4f4a 100644
--- a/src/generators/dom/visitors/Element/Binding.ts
+++ b/src/generators/dom/visitors/Element/Binding.ts
@@ -7,6 +7,7 @@ import Block from '../../Block';
import { Node } from '../../../../interfaces';
import { State } from '../../interfaces';
import getObject from '../../../../utils/getObject';
+import getTailSnippet from '../../../../utils/getTailSnippet';
export default function visitBinding(
generator: DomGenerator,
@@ -83,8 +84,11 @@ export default function visitBinding(
break;
}`;
+ const { name } = getObject(attribute.value);
+ const tailSnippet = getTailSnippet(attribute.value);
+
updateElement = deindent`
- var ${value} = ${snippet};
+ var ${value} = #component.get( '${name}' )${tailSnippet};
for ( var #i = 0; #i < ${state.parentNode}.options.length; #i += 1 ) {
var ${option} = ${state.parentNode}.options[#i];
diff --git a/test/runtime/samples/binding-select-in-yield/Modal.html b/test/runtime/samples/binding-select-in-yield/Modal.html
new file mode 100644
index 000000000000..53ec5fb2cb74
--- /dev/null
+++ b/test/runtime/samples/binding-select-in-yield/Modal.html
@@ -0,0 +1,20 @@
+{{#if !hidden}}
+ {{ yield }}
+{{/if}}
+
+
\ No newline at end of file
diff --git a/test/runtime/samples/binding-select-in-yield/_config.js b/test/runtime/samples/binding-select-in-yield/_config.js
new file mode 100644
index 000000000000..4ff851d33f8f
--- /dev/null
+++ b/test/runtime/samples/binding-select-in-yield/_config.js
@@ -0,0 +1,63 @@
+export default {
+ html: ``,
+
+ data: {
+ letter: 'b'
+ },
+
+ test ( assert, component, target, window ) {
+ component.refs.modal.toggle();
+
+ assert.htmlEqual(target.innerHTML, `
+ b
+
+
+ `);
+
+ const select = target.querySelector('select');
+ const change = new window.MouseEvent('change');
+
+ select.options[2].selected = true;
+ select.dispatchEvent(change);
+ assert.equal(component.get('letter'), 'c');
+
+ assert.deepEqual(Array.from(select.options).map(o => o.selected), [
+ false,
+ false,
+ true
+ ]);
+
+ assert.htmlEqual(target.innerHTML, `
+ c
+
+
+ `);
+
+ component.refs.modal.toggle();
+ component.refs.modal.toggle();
+
+ assert.deepEqual(Array.from(select.options).map(o => o.selected), [
+ false,
+ false,
+ true
+ ]);
+
+ assert.htmlEqual(target.innerHTML, `
+ c
+
+
+ `);
+ }
+};
diff --git a/test/runtime/samples/binding-select-in-yield/main.html b/test/runtime/samples/binding-select-in-yield/main.html
new file mode 100644
index 000000000000..6ed86dc2884b
--- /dev/null
+++ b/test/runtime/samples/binding-select-in-yield/main.html
@@ -0,0 +1,23 @@
+
+ {{letter}}
+
+
+
+
\ No newline at end of file