2012-12-07 13 views
5

Mam widok contentEditable, który po ustawieniu focusOut otrzymam wpisany html i zapisz go.contenteditable i emberjki

Ale kiedy usunąć cały tekst z contentEditable a następnie skupić się na zewnątrz pojawia się błąd

Uncaught Error: Cannot perform operations on a Metamorph that is not in the DOM. 

Proszę zobaczyć ten jsfiddle i usunąć tekst Value1 i skupić się.

http://jsfiddle.net/rmossuk/Q2kAe/8/

Czy ktoś może pomóc?

pozdrawiam Rick

+0

brzmi dla mnie jak może to być błąd. Możesz spróbować zgłosić to na github https://github.com/emberjs/ember.js/issues, zwłaszcza, że ​​masz skrzypce, które mogą go odtworzyć. – Aras

Odpowiedz

4

Twoje EditableView konfiguruje wyświetlacz wiązanie do jego content.value:

<script type="text/x-handlebars" data-template-name="editable"> 
    {{view.content.value}} 
</script> 

Ember wykonuje swoje wiązanie-aktualizującą magię owijając odpowiednich części z tagami skryptu znacznik. Zapraszamy do obejrzenia powstałej DOM:

Ember display binding script tags

Teraz dokonaniu widok edycji. Gdy tylko użytkownik całkowicie usunie zawartość widoku, zauważysz, że otaczające tagi skryptów są również usuwane (przez przeglądarkę). W tej chwili Ember próbuje zaktualizować wyświetlacz, nie znajdzie niezbędnych znaczników skryptu, a tym samym narzeka.

Nie sądzę, aby można było zastosować to podejście niezawodnie z contenteditable, ponieważ nie można kontrolować przeglądarki, pozostawiając nienaruszone otoczenie Ember. Chyba trzeba będzie zadbać o widoku aktualizuje się: usunąć wiązania utwórz content.value obserwatora i aktualizuje DOM wyraźnie:

App.EditableView = Em.View.extend({ 
    contenteditable: "true", 
    attributeBindings: ["contenteditable"], 

    _observeContent: (function() { 
     this._displayContent(); 
    }).observes('content.value'), 

    didInsertElement: function() { 
     this._displayContent(); 
    }, 
    _displayContent: function() { 
     this.$().html(this.get('content.value')); 
    }, 
    ... 

Oto JSFiddle z demo tego rozwiązania: http://jsfiddle.net/green/BEtzb/2/.

(Można oczywiście użyć Ember.TextField który wykorzystuje pole wprowadzania regularne i dostarcza całą magię wiążącą, jeśli to wszystko, czego potrzebujemy.)

+0

dziękuję Julian D. Robiłem to tak wcześniej, ale starałem się sprawdzić, czy mogę użyć embera, aby być na bieżąco zamiast aktualizować zawartość. Wrócę do twojego rozwiązania! –

Powiązane problemy