diff --git a/src/generators/dom/visitors/attributes/binding/index.js b/src/generators/dom/visitors/attributes/binding/index.js
index c2d579e254..2425aaaad7 100644
--- a/src/generators/dom/visitors/attributes/binding/index.js
+++ b/src/generators/dom/visitors/attributes/binding/index.js
@@ -127,8 +127,10 @@ export default function createBinding ( generator, node, attribute, current, loc
});
` );
+ const dependencies = parts[0] in current.contexts ? current.contextDependencies[ parts[0] ] : [ parts[0] ];
+
local.update.addBlock( deindent`
- if ( !${local.name}_updating && '${parts[0]}' in changed ) {
+ if ( !${local.name}_updating && ${dependencies.map( dependency => `'${dependency}' in changed` ).join( '||' )} ) {
${local.name}._set({ ${attribute.name}: ${contextual ? attribute.value : `root.${attribute.value}`} });
}
` );
@@ -151,7 +153,6 @@ export default function createBinding ( generator, node, attribute, current, loc
updateElement = deindent`
var ${value} = ${contextual ? attribute.value : `root.${attribute.value}`};
- console.log( 'value', ${value} );
for ( var ${i} = 0; ${i} < ${local.name}.options.length; ${i} += 1 ) {
var ${option} = ${local.name}.options[${i}];
diff --git a/src/generators/server-side-rendering/visitors/Component.js b/src/generators/server-side-rendering/visitors/Component.js
index b736af3998..c44d58fe51 100644
--- a/src/generators/server-side-rendering/visitors/Component.js
+++ b/src/generators/server-side-rendering/visitors/Component.js
@@ -41,6 +41,11 @@ export default {
return `${attribute.name}: ${value}`;
})
+ .concat( bindings.map( binding => {
+ const parts = binding.value.split( '.' );
+ const value = parts[0] in generator.current.contexts ? binding.value : `root.${binding.value}`;
+ return `${binding.name}: ${value}`;
+ }))
.join( ', ' );
const expression = node.name === ':Self' ? generator.name : `template.components.${node.name}`;
diff --git a/test/generator/samples/component-binding-each-object/Widget.html b/test/generator/samples/component-binding-each-object/Widget.html
new file mode 100644
index 0000000000..bba644f351
--- /dev/null
+++ b/test/generator/samples/component-binding-each-object/Widget.html
@@ -0,0 +1 @@
+{{value.id}}
\ No newline at end of file
diff --git a/test/generator/samples/component-binding-each-object/_config.js b/test/generator/samples/component-binding-each-object/_config.js
new file mode 100644
index 0000000000..0802361f3d
--- /dev/null
+++ b/test/generator/samples/component-binding-each-object/_config.js
@@ -0,0 +1,24 @@
+export default {
+ data: {
+ a: [{ id: 'foo' }, { id: 'bar' }, { id: 'baz' }]
+ },
+
+ html: `
+ foobarbaz
+ `,
+
+ test ( assert, component, target ) {
+ component.set({
+ a: [
+ { id: 'yep' },
+ { id: 'nope' }
+ ]
+ });
+
+ assert.htmlEqual( target.innerHTML, `
+ yepnope
+ ` );
+
+ component.destroy();
+ }
+};
diff --git a/test/generator/samples/component-binding-each-object/main.html b/test/generator/samples/component-binding-each-object/main.html
new file mode 100644
index 0000000000..d378fcf833
--- /dev/null
+++ b/test/generator/samples/component-binding-each-object/main.html
@@ -0,0 +1,13 @@
+{{#each a as x}}
+
+{{/each}}
+
+