Sorry I didn't see your question earilier. Before, you wrote:
> <datapointer name = "dp" xpath="local:list:/">
This binds the datapointer to the dataset itself. It will not run ondata
or receive updates when the dataset loads data because the result of its
xpath expression doesn't change. I think that instead you want to write:
<datapointer name = "dp" xpath="local:list:/*">
This will run ondata only when the local:list dataset loads data.
A
On May 2, [EMAIL PROTECTED] wrote:
>
> Just to let you know that I finally got my datapipe class working as expected
> - thanks a lot for everyone's help. The trick was to reassign the
> datapointer's xpath attribute at the end of the ondata method. (4th line from
> the end). This forces it to update the second time data is received, and not
> just the first time.
>
> <class name = "datapipe" extends = "node">
> <attribute name = "table" type = "string" />
> <dataset name="list" type="http" request = "false" />
> <dataset name="action" type="http" request = "false" />
>
> <method reference = "action" event="ondata">
> dp.setXPath("local:action:/");
> </method>
>
> <datapointer name = "dp">
> <method event="ondata">
> if (this.xpathQuery("result/text()") == "success") {
> parent.list.doRequest();
> Debug.write("Operation succeeded");
> } else {
> Debug.write("Operation failed");
> }
> this.setXPath("local:list:/");
> </method>
> </datapointer>
> </class>
>
> The result is a canvas where all dynamic data automatically updates to stay in
> sync with the table records whenever the database is updated.
>
> Thanks again for your help.
>
>
> On 1 May 2006, at 18:27, Henry Minsky wrote:
>
> > I believe an empty local datset will be created by the <dataset>
> > declaration. That is, it will have no child elements. There may be some
> > issue with how you are generating the ondata events. When I did this
> > manually from the debugger, the xpath query worked fine.
> >
> > <class name = "datapipe" extends = "node">
> > <attribute name = "table" type = "string" />
> > <dataset name="action" type="http" request = "false" />
> > <datapointer name='bar' xpath="local:action:/">
> > <method event="ondata">
> > var q = "results/text()";
> > Debug.write(q, this.xpathQuery(q));
> > </method>
> > </datapointer>
> > </class>
> >
> > <datapipe id='foo'/>
> >
> >
> > In the debugger, I did this manually
> >
> > lzx> k = new LzDataElement("results")
> > ?LzDataElement#3| <results/>?
> > lzx> c = new LzDataText("success!")
> > ?LzDataText(0)#4| []?
> > lzx> k.appendChild(c)
> > ?LzDataText(0)#4| []?
> > lzx> foo.action.appendChild(k)
> > ?LzDataElement#3| <results>success!</results>?
> > lzx> foo.bar
> > ?LzDatapointer#0| <action><results>success!</results></action>?
> > lzx> foo.bar.ondata.sendEvent()
> > results/text() success!
> > lzx>
> >
> >
> > You're right there - the 'action' dataset is intended as a
> > 'placeholder' that I can
> > route requests through from the main canvas. The idea is that
> > requests are
> > fed through the action dataset and an updated set of records is
> > returned via
> > the 'list' dataset on successful submission. This in turn
> > automatically updates
> > any views bound to the list dataset.
> >
> > So there's no actual location for the action dataset until a request
> > is made from
> > the canvas - this was my intention, but I appreciate it's not the
> > traditional method.
> >
> > Any other thoughts would be warmly received.
> > http://rafb.net/paste/results/eh2soq66.html
> >
> >
> >
> > > > I'm having trouble referencing a dataset from within a class.
> > > >
> > > > The code here: http://rafb.net/paste/results/eh2soq66.html produces
> > > > the error "couldn't find dataset for action:/" (Line 13 is where it's
> > > > referenced.)
> > > >
> > > > Would anyone be kind enough to suggest what I should do to correct
> > > > it?
> >
> _______________________________________________
Laszlo-user mailing list
[email protected]
http://www.openlaszlo.org/mailman/listinfo/laszlo-user