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 [1]. 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]. To post to this group, send email to [email protected]. Visit this group at https://groups.google.com/group/angular [2]. For more options, visit https://groups.google.com/d/optout [3]. Links: ------ [1] https://github.com/angular/angular/issues/6114 [2] https://groups.google.com/group/angular [3] 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.
