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}} + +