Add check for disposed model before setting the property Check if this._ exists before processing the set operation. 440326: [AutoSuggest] JavaScript Error when setting property of remote object and destroying it in the same response https://bugs.eclipse.org/bugs/show_bug.cgi?id=440326 Change-Id: I2d3573d2772b4abab11f303ff9892383d882f681 Signed-off-by: Ivan Furnadjiev <ivan@eclipsesource.com>
diff --git a/bundles/org.eclipse.rap.addons.autosuggest/js/rwt/remote/Model.js b/bundles/org.eclipse.rap.addons.autosuggest/js/rwt/remote/Model.js index 8b33b5a..89d92d5 100644 --- a/bundles/org.eclipse.rap.addons.autosuggest/js/rwt/remote/Model.js +++ b/bundles/org.eclipse.rap.addons.autosuggest/js/rwt/remote/Model.js
@@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2013 EclipseSource and others. + * Copyright (c) 2013, 2014 EclipseSource and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -43,7 +43,7 @@ var property = arguments[ 0 ]; var value = arguments[ 1 ]; var options = arguments[ 2 ] || {}; - if( this._.properties[ property ] !== value ) { + if( this._ && this._.properties[ property ] !== value ) { var event = { "value" : value, "type" : "change:" + property,
diff --git a/tests/org.eclipse.rap.addons.autosuggest.test/jasmine/jasmine/specs/ModelSpec.js b/tests/org.eclipse.rap.addons.autosuggest.test/jasmine/jasmine/specs/ModelSpec.js index 32ab3e3..64746e0 100644 --- a/tests/org.eclipse.rap.addons.autosuggest.test/jasmine/jasmine/specs/ModelSpec.js +++ b/tests/org.eclipse.rap.addons.autosuggest.test/jasmine/jasmine/specs/ModelSpec.js
@@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2013 EclipseSource and others. + * Copyright (c) 2013, 2014 EclipseSource and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -177,6 +177,24 @@ expect( rap.fakeRemoteObject.notify ).not.toHaveBeenCalled(); } ); + it( "does not notify change listener with disposed model", function() { + model.addListener( "change:foo", logger ); + model.destroy(); + + model.set( "foo", 23 ); + + expect( log.length ).toBe( 0 ); + } ); + + it( "does not call notify on remoteObject with disposed model", function() { + spyOn( rap.fakeRemoteObject, "notify" ); + model.destroy(); + + model.set( "foo", 23 ); + + expect( rap.fakeRemoteObject.notify ).not.toHaveBeenCalled(); + } ); + } ); describe( "destroy", function() {