On Sun, Feb 17, 2019 at 1:25 PM Brian Theado <[email protected]> wrote:
> > > On Sun, Feb 17, 2019 at 10:25 AM stefano franchi < > [email protected]> wrote: > [...] > >> In particular, there is an issue I have not been able to solve yet, and I >> hope you may help---where do I look to find examples of a callback function >> that would allow the calling code to tell the external library to save its >> data? >> > > This is backwards from the way I've implemented it and seen it implemented > in other widgets. I think the expectation is that the external library > provides a way to register a callback will will be called by the library > every time anything changes. The widget can register a callback in which > the code will ask the library to serialize its data. The resulting data is > saved to some tiddler field in order to persist. In this way, the data is > always in sync with the tiddler field. The widget does not get notified it > is about to be destroyed (that I know of), so having the data always in > sync is required. > > I think in a previous exchange you suggested to take a look at the >> Codemirror plugin, but I could not find where the mechanism is implemented. >> I guess it is because I am not really sure what I am looking for. >> > > > This is the code I had in mind > https://github.com/Jermolene/TiddlyWiki5/blob/master/plugins/tiddlywiki/codemirror/engine.js#L121 > > // Set up a change event handler > this.cm.on("change",function() { > self.widget.saveChanges(self.getText()); > }); > > [...] > > /* > Get the text of the engine > */ > CodeMirrorEngine.prototype.getText = function() { > return this.cm.getValue(); > }; > > > Here's an example I wrote, but it is much more complicated WRT the > persisting of data: > https://github.com/btheado/tweve/blob/master/src/plugins/btheado/tweve/files/eve-widget.js#L61 > > Here's another one I wrote, but not well commented and probably not a good > example to follow: > https://github.com/btheado/jsoneditor/blob/master/jsoneditor-widget.js#L60 > > Hi Brian, thanks for the pointers---all very useful. I had indeed missed that bit of the codemirror code, which makes perfect sense now that I see it. > >> Your tutorial on the refresh mechanism does a great job of explaining how >> a widget manages to keep itself in sync with the underlying tiddler. It is >> the reverse procedure that is still baffling to me. In particular, is >> complete sync the only option---sending back a call from the widget back to >> the tiddler after every single update? That may not be feasible in case the >> external library works on on its own internal representation of the >> underlying tiddler data and it may be expensive to convert back and forth >> (as it is in my case). I am thinking a simpler "updateTiddlerOnExit" method >> to call before the widget is destroyed would be more appropriate, but I >> haven't found out how to manage this kind of tiddler-->widget communication. >> > > See this related discussion, I don't think TW currently supports what you > are after: https://github.com/Jermolene/TiddlyWiki5/issues/1784 > > I see, thanks for saving me hours of digging! That's exactly what I was after. Too bad it's not supported yet. So in your case you are saying the conversion back and forth is too > expensive to always keep in sync? Have you already tried it and found it to > be too slow? > I did and it is borderline. I will keep looking for solutions. But thanks a lot for the help! Cheers, S. -- __________________________________________________ Stefano Franchi [email protected] <[email protected]> http://stefano.cleinias.org -- You received this message because you are subscribed to the Google Groups "TiddlyWikiDev" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at https://groups.google.com/group/tiddlywikidev. To view this discussion on the web visit https://groups.google.com/d/msgid/tiddlywikidev/CAJODLwYKocDJKN2cqmPzHkOcCGiQzU6CSO_X0Dm8fmq7%3DPDdaA%40mail.gmail.com. For more options, visit https://groups.google.com/d/optout.
