Eclipse Community Forums
Forum Search:

Search      Help    Register    Login    Home
Home » Eclipse Projects » Remote Application Platform (RAP) » when press F5 or update the page, an uncaught error occors
when press F5 or update the page, an uncaught error occors [message #1231645] Wed, 15 January 2014 06:03 Go to next message
Song David is currently offline Song DavidFriend
Messages: 190
Registered: April 2011
Senior Member
Hi,
I write a custom widget with d3js, when I put it into a view and everything is ok, but when I put it into my app, it only works well when no pressing F5 or refresh the browser. When I refresh the browser, an uncaught error occors and the fail code is like below:
index.php/fa/17241/0/

Thank you very much
  • Attachment: error.png
    (Size: 11.69KB, Downloaded 150 times)
Re: when press F5 or update the page, an uncaught error occors [message #1231738 is a reply to message #1231645] Wed, 15 January 2014 09:22 Go to previous messageGo to next message
Tim Buschtoens is currently offline Tim BuschtoensFriend
Messages: 387
Registered: July 2009
Senior Member
Hi.

Does the error occur before or after the page is reloaded?
(I.e. does it belong to the unloading of the old page or the loading of
the new page?)

Greetings,
Tim

Am 15.01.2014 07:03, schrieb Song David:
> Hi,
> I write a custom widget with d3js, when I put it into a view and everything is ok, but when I put it into my app, it only works well when no pressing F5 or refresh the browser. When I refresh the browser, an uncaught error occors and the fail code is like below:
>
>
> Thank you very much
>

--
Tim Buschtöns

Twitter: @EclipseRAP
Blog: http://eclipsesource.com/blogs/

Professional services for RAP and RCP?
http://eclipsesource.com/services/rap/
Re: when press F5 or update the page, an uncaught error occors [message #1231835 is a reply to message #1231738] Wed, 15 January 2014 14:16 Go to previous messageGo to next message
Song David is currently offline Song DavidFriend
Messages: 190
Registered: April 2011
Senior Member
it is the second times to load the app, that is say, the loading of the new page, When I close the browser and reopen the browser again and load the app, everything is ok again.
even inside the app, I can switch the page by click the button, and the custom widget can be loaded well, but as long as I press F5 key or click the refresh button of the browser, the error occors.
index.php/fa/17252/0/

[Updated on: Wed, 15 January 2014 14:40]

Report message to a moderator

Re: when press F5 or update the page, an uncaught error occors [message #1231868 is a reply to message #1231835] Wed, 15 January 2014 15:46 Go to previous messageGo to next message
Tim Buschtoens is currently offline Tim BuschtoensFriend
Messages: 387
Registered: July 2009
Senior Member
I need to see your typeHandler.

Am 15.01.2014 15:16, schrieb Song David:
> it is the second times to load the app, that is say, the loading of the
> new page

--
Tim Buschtöns

Twitter: @EclipseRAP
Blog: http://eclipsesource.com/blogs/

Professional services for RAP and RCP?
http://eclipsesource.com/services/rap/
Re: when press F5 or update the page, an uncaught error occors [message #1232250 is a reply to message #1231868] Thu, 16 January 2014 14:11 Go to previous messageGo to next message
Song David is currently offline Song DavidFriend
Messages: 190
Registered: April 2011
Senior Member
js code
jsmachine = {};
jsmachine.Machine = function(parent, renderer) {
	this._renderer = renderer;
	if(this._element == null){
		this._element = this.createElement(parent);
	}
	this._svg = d3.select(this._element).append("svg").attr("class", "machine");
	this._svg.append("rect").attr("width", "100%").attr("height", "100%").attr("fill", "#AAD8B0");
	this._needsLayout = true;
	this._paths = [];
	this._texts = [];
	var that = this;

	rap.on("render", function() {
		if (this._rendererJSONData) {
			this._rendererMachine(this._rendererJSONData);
		}
	});
	parent.addListener("Resize", function() {
		that._resize(parent.getClientArea());
		if (this._rendererJSONData) {
			this._rendererMachine(this._rendererJSONData);
		}
	});
	this._resize(parent.getClientArea());
};

jsmachine.Machine.prototype = {
		
	createElement : function(parent) {
		var element = document.createElement("div");
		element.style.position = "absolute";
		element.style.left = "0";
		element.style.top = "0";
		element.style.width = "100%";
		element.style.height = "100%";
		parent.append(element);
		return element;
	},

	_rendererMachine : function(jsonData) {
		if(this._paths.length == 0){
			this._createMachine(jsonData);
			this._createText(jsonData);
		}else{
			this._paths.data(jsonData).style("fill", function(d){
				var c;
		    	switch(d.status){
		    		case 0:
		    			c = "#0A7B83";
		    			break;
		    		case 1:
		    			c = "#2AA876";
		    			break;
		    		case 2:
		    			c = "#FFD265";
		    			break;
		    		case 3:
		    			c = "#F19C65";
		    			break;
		    		case 4:
		    			c = "#CE4D45";
		    			break;
		    	}
		    	return c;
			});
			
			this._texts.data(jsonData).text(function(d) {return d.name;})
		    .style("cursor", "pointer")
		    .style("font-size", 10)
		    .attr("x", function(d) {return d.label_x;})
		    .attr("y", function(d) {return d.label_y;})
		    .append("tspan")
		    .attr("x", function(d) {return d.label_x;})
		    .attr("dy", 15).text(function(d) {return d.extendInfo;});
		}
	},

	_createMachine : function(jsonData) {
		var that = this;

		var lineFunction = d3.svg.line().x(function(d) { return d.x;})
										.y(function(d) {return d.y;})
										.interpolate("linear");

		this._paths = this._svg.selectAll("path").data(jsonData).enter().append("path");
		
		this._paths.attr("d", function(d) { return lineFunction(d.anchorPoint); })
		    .attr("stroke", "#669966")
		    .attr("stroke-width", 1)
		    .attr("fill", function(d) {
		    	var c;
		    	switch(d.status){
		    		case 0:
		    			c = "#0A7B83";
		    			break;
		    		case 1:
		    			c = "#2AA876";
		    			break;
		    		case 2:
		    			c = "#FFD265";
		    			break;
		    		case 3:
		    			c = "#F19C65";
		    			break;
		    		case 4:
		    			c = "#CE4D45";
		    			break;
		    	}
		    	return c;
		    })
		    .style("cursor", "pointer")
		    .on("dblclick", function(d) {that._mouseDoubleClick(d.mid);})
		    .on("click", function(d) {that._selectItem(d.mid);});
	},

	_createText : function(jsonData) {
		this._texts = this._svg.selectAll("text").data(jsonData).enter().append("text");
		this._texts.text(function(d) {return d.name;})
		    .style("font-size", 10)
		    .attr("x", function(d) {return d.label_x;})
		    .attr("y", function(d) {return d.label_y;})
		    .append("tspan")
		    .attr("x", function(d) {return d.label_x;})
		    .attr("dy", 15).text(function(d) {return d.extendInfo;});
	},

	_resize : function(clientArea) {
		this._width = clientArea[2];
		this._height = clientArea[3];
		this._svg.attr("width", this._width).attr("height", this._height);
	},

	_selectItem : function(index) {
		var remoteObject = rap.getRemoteObject(this);
		remoteObject.notify("Selection", {"index" : index });
	},

	_mouseDoubleClick : function(index) {
		var remoteObject = rap.getRemoteObject(this);
		remoteObject.notify("MouseDoubleClick", {"index" : index });
	},

	destroy : function() {
		var element = this._element;
		if (element.parentNode) {
			element.parentNode.removeChild(element);
		}
	},

	setRendererJSONData : function(rendererJSONData) {
		this._rendererJSONData = JSON.parse(rendererJSONData);
		this._rendererMachine(this._rendererJSONData);
	}
};

// TYPE HANDLER

rap.registerTypeHandler("jsmachine.Machine", {

	factory : function(properties) {
		var parent = rap.getObject(properties.parent);
		return new jsmachine.Machine(parent);
	},

	destructor : "destroy",

	properties : [ "rendererJSONData" ],

	events : [ "Selection", "MouseDoubleClick" ]

});


java code:
package com.micromms.weave.machine;

import java.util.Map;

import org.eclipse.rap.json.JsonObject;
import org.eclipse.rap.rwt.RWT;
import org.eclipse.rap.rwt.lifecycle.WidgetUtil;
import org.eclipse.rap.rwt.remote.AbstractOperationHandler;
import org.eclipse.rap.rwt.remote.RemoteObject;
import org.eclipse.swt.SWT;
import org.eclipse.swt.internal.SWTEventListener;
import org.eclipse.swt.widgets.Canvas;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;

public class JMachine extends Canvas {

	private static final String REMOTE_TYPE = "jsmachine.Machine";
	protected final RemoteObject remoteObject;
	private String rendererJSONData;

	public JMachine(Composite parent, int style) {
		super(parent, style);
		remoteObject = RWT.getUISession().getConnection().createRemoteObject(REMOTE_TYPE);
		remoteObject.set("parent", WidgetUtil.getId(this));
		remoteObject.setHandler(new AbstractOperationHandler() {
			@Override
			public void handleNotify(String eventName, JsonObject properties) {
				if ("Selection".equals(eventName)) {
					Event event = new Event();
					event.index = properties.get("index").asInt();
					notifyListeners(SWT.Selection, event);
				}
				
				if("MouseDoubleClick".equals(eventName)){
					Event event = new Event();
					event.index = properties.get("index").asInt();
					notifyListeners(SWT.MouseDoubleClick, event);
				}
			}
			public void handleSet(Map<String, Object> properties) {
				if (properties.containsKey("rendererJSONData")) {
					JMachine.this.rendererJSONData = (String) properties.get("rendererJSONData");
				}
			}
		});
		MachineResources.ensureJavaScriptResources();
	}

	@Override
	public void addListener(int eventType, Listener listener) {
		boolean wasListening = isListening(SWT.Selection);
		super.addListener(eventType, listener);
		if (eventType == SWT.Selection && !wasListening) {
			remoteObject.listen("Selection", true);
		}
		
		boolean wasListeningDoubleClick = isListening(SWT.MouseDoubleClick);
		//super.addListener(eventType, listener);
		if(eventType == SWT.MouseDoubleClick && wasListeningDoubleClick){
			remoteObject.listen("MouseDoubleClick", true);
		}
	}

	@Override
	public void removeListener(int eventType, Listener listener) {
		boolean wasListening = isListening(SWT.Selection);
		super.removeListener(eventType, listener);
		if (eventType == SWT.Selection && wasListening) {
			if (!isListening(SWT.Selection)) {
				remoteObject.listen("Selection", false);
			}
		}
		boolean wasListeningDoubleClick = isListening(SWT.MouseDoubleClick);
		//super.removeListener(eventType, listener);
		if (eventType == SWT.MouseDoubleClick && wasListeningDoubleClick) {
			if (!isListening(SWT.MouseDoubleClick)) {
				remoteObject.listen("MouseDoubleClick", false);
			}
		}
	}

	@Override
	protected void removeListener(int eventType, SWTEventListener listener) {
		super.removeListener(eventType, listener);
	}
	

	String getRemoteId() {
		return remoteObject.getId();
	}

	public String getRendererJSONData() {
		checkWidget();
		return rendererJSONData;
	}

	public void setRendererJSONData(String rendererJSONData) {
		checkWidget();
		if(this.rendererJSONData != rendererJSONData){
			this.rendererJSONData = rendererJSONData;
			remoteObject.set("rendererJSONData", rendererJSONData);
		}
	}

}
Re: when press F5 or update the page, an uncaught error occors [message #1232605 is a reply to message #1232250] Fri, 17 January 2014 10:05 Go to previous message
Tim Buschtoens is currently offline Tim BuschtoensFriend
Messages: 387
Registered: July 2009
Senior Member
Hi.

I don't see any obvious problems that could lead to this error, so
possibly it's a server side issue. Maybe the id you send for the parent
it not valid?

However, this is one thing that can't work:

> rap.on("render", function() {
> if (this._rendererJSONData) {
> this._rendererMachine(this._rendererJSONData);
> }
> });

First, by making this an anonymous function (you hold to reference to
it) you can never unregister it (rap.off), and you should (in destroy).
Otherwise that function is called on "render" even after the widget is
disposed, which would definitely lead to errors.

Also, more importantly, the function has no "this", so there is no way
it could work. You must bind the function to your "this" before
registering it. Take a look how "bind", "bindAll", "rap.on" and
"rap.off" are used here:

http://git.eclipse.org/c/rap/incubator/org.eclipse.rap.incubator.richtext.git/tree/bundles/org.eclipse.rap.addons.ckeditor/src/resources/handler.js

Greetings,
Tim

--
Tim Buschtöns

Twitter: @EclipseRAP
Blog: http://eclipsesource.com/blogs/

Professional services for RAP and RCP?
http://eclipsesource.com/services/rap/
Previous Topic:Creating a custom composite with rap
Next Topic:CTabitem vs TabItem theming
Goto Forum:
  


Current Time: Sun Nov 23 13:33:36 GMT 2014

Powered by FUDForum. Page generated in 0.02015 seconds
.:: Contact :: Home ::.

Powered by: FUDforum 3.0.2.
Copyright ©2001-2010 FUDforum Bulletin Board Software