Suchen Sie eine Backbone.js Ansicht, wenn Sie das Modell kennen?

8

Gibt eine Seite an, die Backbone.js verwendet, um eine Sammlung mit einer Ansicht zu verknüpfen ( RowsView , erstellt <ul> ), die Unteransichten ( RowView , creates <li> ) für jedes Modell in der Sammlung erstellt Ich habe ein Problem mit der Einrichtung der Inline-Bearbeitung für diese Modelle in der Sammlung.

Ich habe eine edit() -Methode für die RowView -Ansicht erstellt, die den Inhalt von li durch ein Textfeld ersetzt. Wenn der Benutzer in diesem Textfeld tab drückt, möchte ich den% -Zeichen auslösen. co_de% Methode der nächsten Ansicht in der Liste.

Ich kann das Modell des nächsten Modells in der Sammlung abrufen:

%Vor%

Aber die Frage ist, wie man die View findet, die an das Model angehängt ist. Das übergeordnete Element edit() View behält keinen Verweis auf alle untergeordneten Ansichten. Es ist RowsView Methode ist nur:

%Vor%

Muss ich es neu schreiben, um ein separates Array von Zeigern auf alle render() s zu erhalten, die es darunter hat? Oder gibt es eine kluge Möglichkeit, die View zu finden, an die ein bekanntes Modell angehängt ist?

Hier ist ein jsFiddle des ganzen Problems: Ссылка

    
MidnightLightning 13.07.2012, 15:48
quelle

2 Antworten

11

Es ist nicht elegant, einen Verweis auf die Ansicht in Ihrem Modell zu speichern, Sie können jedoch eine Ansicht mit einem Modell mit Ereignissen verknüpfen, wie folgt:

%Vor%

In RowView höre auf das Ereignis prepareEdit und in diesem Listener-Aufruf edit (), etwa so:

%Vor%     
Daniel Aranda 13.07.2012, 15:55
quelle
2

Ich würde sagen, dass Ihre RowsView die Komponente RowView s im Auge behalten sollte. Die einzelnen RowView s sind wirklich Teile von RowsView und es ist sinnvoll, dass eine Ansicht ihre Teile verfolgen sollte.

Also würde Ihre RowsView eine render Methode wie folgt haben:

%Vor%

Dann brauchen Sie nur eine Möglichkeit, ein Tab in einen Index in this.child_views zu konvertieren.

Eine Möglichkeit besteht darin, Ereignisse zu verwenden, Backbone-Ansichten haben Backbone.Events gemischt, sodass Ansichten Ereignisse auf sich selbst auslösen können und andere Dinge diese Ereignisse abhören können. In deinem RowView könntest du folgendes haben:

%Vor%

und Ihre RowsView würden v.on('tab-next', this.edit_next); in der this.collection.map und Sie könnten eine edit_next wie folgt sortieren:

%Vor%

Demo: Ссылка

Eine Variante wäre, einen Verweis auf RowsView zu RowView s hinzuzufügen, und dann könnte tab_next direkt this.parent_view.edit_next() aufrufen.

Eine weitere Möglichkeit ist, den keydown Handler in RowsView zu setzen. Dies fügt ein bisschen Kopplung zwischen RowView und RowsView hinzu, aber das ist wahrscheinlich kein großes Problem in diesem Fall, aber es ist ein bisschen hässlicher als die Ereignislösung:

%Vor%

Demo: Ссылка

    
mu is too short 13.07.2012 20:51
quelle

Tags und Links