- From: Robin Berjon <robin@berjon.com>
- Date: Mon, 21 Mar 2011 13:38:42 +0100
- To: Cameron McCormack <cam@mcc.id.au>
- Cc: Mark Watson <watsonm@netflix.com>, public-device-apis@w3.org
Hi Cameron, On Mar 17, 2011, at 21:42 , Cameron McCormack wrote: > Mark Watson: >> However, in the examples, such as the example in 4.4, a function >> "success" is defined and it is this function that is supplied as the >> argument (in this case to the monitor method). >> >> How is it that the success function is compliant to the SuccessCB >> interface, which has the method onSuccess ? > > It is due to the interfaces being defined like this: > > [Callback=FunctionOnly, NoInterfaceObject] > interface SuccessCB { > void onSuccess(optional Object obj); > }; > > The [Callback] indicates that the object may be implemented by user > script. That would be sufficient to allow a Function object to be > passed as a SuccessCB. The FunctionOnly part disallows passing an > object { onSuccess: function(obj) { … } }. > > http://dev.w3.org/2006/webapi/WebIDL/#Callback Mark is not the first one to be (IMHO understandably) confused by this somewhat arcane construct. I know that you already have a lot on your plate with WebIDL, but I was wondering if you'd considered some syntax to make this more straightforward to specify. Since we don't care about Java, I've thought of switching to just Function but I don't like losing the ability to specify the callback's signature. Mark, some extra information just so you know where this comes from: in JS it's not a problem at all to just pass a Function object and have it be called back. But in other languages that's not possible and you might have to construct a special class of type SuccessCB with a specific onSuccess method in order to handle the callbacks. Since WebIDL is supposed to be language-independent the above construct makes it possible to generate either approach depending on the specific language binding. -- Robin Berjon - http://berjon.com/
Received on Monday, 21 March 2011 12:39:10 UTC