diff --git a/src/generators/dom/visitors/Component.ts b/src/generators/dom/visitors/Component.ts index 69587d5d07..edbf10a637 100644 --- a/src/generators/dom/visitors/Component.ts +++ b/src/generators/dom/visitors/Component.ts @@ -185,7 +185,7 @@ export default function visitComponent( _bind: function(changed, childState) { var state = #component.get(), newState = {}; ${setParentFromChildOnChange} - ${name_updating} = changed; + ${name_updating} = @assign({}, changed); #component._set(newState); ${name_updating} = {}; } diff --git a/test/runtime/samples/observe-binding-ignores-unchanged/Nested.html b/test/runtime/samples/observe-binding-ignores-unchanged/Nested.html new file mode 100644 index 0000000000..8f7559a778 --- /dev/null +++ b/test/runtime/samples/observe-binding-ignores-unchanged/Nested.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/test/runtime/samples/observe-binding-ignores-unchanged/_config.js b/test/runtime/samples/observe-binding-ignores-unchanged/_config.js new file mode 100644 index 0000000000..927572e735 --- /dev/null +++ b/test/runtime/samples/observe-binding-ignores-unchanged/_config.js @@ -0,0 +1,28 @@ +export default { + html: ` + +
field1: 1
+field2: 2
+ `, + + test(assert, component, target, window) { + let triggered = false; + component.refs.nested.observe('field2', () => { + triggered = true; + }, { init: false }); + + const input = target.querySelector('input'); + const event = new window.Event('input'); + + input.value = 3; + input.dispatchEvent(event); // will throw error if observer fires incorrectly + + assert.ok(!triggered); + + assert.htmlEqual(target.innerHTML, ` + +field1: 3
+field2: 2
+ `); + } +}; \ No newline at end of file diff --git a/test/runtime/samples/observe-binding-ignores-unchanged/main.html b/test/runtime/samples/observe-binding-ignores-unchanged/main.html new file mode 100644 index 0000000000..8cdc42f96e --- /dev/null +++ b/test/runtime/samples/observe-binding-ignores-unchanged/main.html @@ -0,0 +1,21 @@ +field1: {{myObject.field1}}
+field2: {{myObject.field2}}
+ + \ No newline at end of file