Geez, thanks for this... that's unfortunate. I had not yet played with this solution, yet it seems it's a rather big issue. If I find some workaround or fix I'll surely post it here. I'm also wondering how I can help you attracting attention to your posted issue, of course this would be beneficial for all of us. Should I make another post or append something to your own just tell me.
On Monday, January 18, 2016 at 9:46:09 AM UTC+1, Radek Holý wrote: > > Unfortunately, this is not the end. Sooner or later you will hit the same > problem as I did while trying to integrate CodeMirror... > > Actually, you hit it already. When you type something into the editor, > your directive emits an event which causes the "xml" property to be set. > The change of the "xml" property emits another event which is sent back to > the directive because of the two-way binding. On such event, the directive > calls "editor.setValue" and this method moves the cursor to the end of the > document. You have already "fixed" that using the conditional "if (sOld === > s) return". I did that as well. > > But once you start using the code in practice, you quickly realize that > the "fix" was not enough. Try to type something into the editor. Then move > to cursor at the beginning, hold a key down for several seconds and watch > the cursor. Sooner or later, you realize that the cursor have skipped to > the end of the editor and maybe that the editor have ended in an endless > loop. > > To reproduce it easier, I recommend running enough busy loops (e.g. > "python -c 'while True:pass'") on the client. > > I've already reported the issue: > https://github.com/angular/angular/issues/6114. Unfortunately, I failed > to attract enough attention. > > If you find a workaround, please, let me know. I spent two weeks trying to > find one and I gave up when I tried to inspect the call stack. The only > acceptable workaround I was able to come up with is to ignore the incoming > changes while the editor is focused. But it has some drawbacks too... > > > > On 2016-01-17 15:48, Naftis wrote: > > Thanks Michael, this did it! Now it seems that the binding is working in > both directions. I updated the Plunker accordingly. Of course, this is a > hack but I suppose/hope that once Angular 2 is released such issues should > be removed. Meantime, thanks again! > > On Sunday, January 17, 2016 at 3:31:17 PM UTC+1, michael corbridge wrote: >> >> Update: >> ummmm .... that ndx is for debugging - you can get rid of it >> >> On Sunday, January 17, 2016 at 9:29:31 AM UTC-5, michael corbridge wrote: >>> >>> I see that same ... >>> >>> so I did this >>> >>> ------------------------------------------------------------------------------------------------------------------- >>> >>> this.editor.on("change", (e:any) => { >>> this.ndx++; >>> if(this.ndx === 10){ >>> return; >>> } >>> let s = this.editor.getValue(); >>> if(s.length !== 0){ //<--------------------check the length of the string >>> sent back >>> this.textChanged.emit(s); >>> } >>> }); >>> >>> ----------------------------------------------------------------- >>> >>> and that seems to fix the race condition >>> >>> >>> On Sunday, January 17, 2016 at 1:36:41 AM UTC-5, Naftis wrote: >>>> >>>> Thank you, this fixed the issue, I had misinterpreted the docs when >>>> they say that the [(...)] notation is conceptually equivalent to a [...] >>>> plus a (...) notation so I thought I had not to add the event handler >>>> explicitly. Anyway, this now poses *another problem*: try *first *typing >>>> something in the editor, and *then *clicking the SET XML button: now >>>> the editor flickers in an endless loop, as the change on one side is >>>> reflected on the other side, and vice-versa, so that Angular seems stuck >>>> in >>>> a circular update. This also happens if you type something, select a part >>>> or whole the typed text, and type something else, thus replacing the >>>> selection. How could I solve this? >>>> >>> > -- > You received this message because you are subscribed to the Google Groups > "AngularJS" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected] <javascript:>. > To post to this group, send email to [email protected] <javascript:> > . > Visit this group at https://groups.google.com/group/angular. > For more options, visit https://groups.google.com/d/optout. > > > > -- You received this message because you are subscribed to the Google Groups "AngularJS" 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/angular. For more options, visit https://groups.google.com/d/optout.
