In Backbone ist dieses Modell undefiniert, warum?

8

Ich habe überall nach einer Antwort gesucht, war aber nicht zufrieden mit dem, was ich gefunden habe.

Das Problem ist, ich mache ein Tutorial von Addy Osmani, um eine "Todo" -App in Backbone zu machen, aber wenn ich auf die Konsole schaue, erhalte ich eine Fehlermeldung, dass this.model is undefined .

Ich habe sogar versucht, diese SO Antwort Backbone-Modell Fehler in der Konsole angezeigt , aber ich bekomme immer noch den gleichen Fehler. Bitte sag mir was falsch ist.

Was sind übrigens this.model oder this.collection ? Ich habe eine Idee, dass sie sich auf Backbone.Model und Backbone.Collection beziehen, aber wie funktionieren sie? Ich frage das, weil in einem anderen Tutorial this.collection und this.model.models auch undefiniert waren, wenn ich die Model und Collection eindeutig definiert habe.

Vielen Dank

JS:

%Vor%     
Shaoz 14.02.2013, 01:33
quelle

3 Antworten

10

Sie müssen ein Model oder Collection instanziieren und es an Ihre Ansicht übergeben. Wenn die Rendermethode in Ihrem TodoView aufgerufen wird, ist this.model andernfalls null.

Versuchen Sie zum Beispiel, die letzten paar Zeilen Ihres Codes wie folgt neu anzuordnen:

%Vor%

Von diesem Punkt an können Sie Todos ändern (was ein Collection ist) und Ihre Ansicht kann die Ereignisse von Todos anhören und entsprechend rendern.

    
elevine 14.02.2013, 01:37
quelle
3

Sie haben es nicht gesagt, aber ich nehme an, dass der Fehler, den Sie bekommen, in der render () -Methode auftritt.

Ihr Problem besteht darin, dass Sie einen neuen Modelltyp ( var Todo = Backbone.Model.extend({... ) definieren, ihn jedoch niemals instanziieren und das Modell nicht an den todoview-Konstruktor übergeben.

Also müssen Sie zumindest tun:

%Vor%     
Recurse 14.02.2013 01:41
quelle
2

Die Antwort in der anderen Frage ist die Antwort auf Ihre Frage: Sie übergeben das Modell nicht an die Ansicht, wenn Sie die Ansicht instanziieren.

%Vor%

Wenn Sie ein Objekt an den Konstruktor einer Ansicht übergeben, sucht es nach bestimmten Schlüsseln und hängt sie direkt an die Ansicht an.

Sie können das sehen, indem Sie sich die Backbone-Quelle ansehen und nach viewOptions suchen.

So erhalten Sie this.model und this.collection automatisch an die this der Ansicht angehängt.

    
satchmorun 14.02.2013 01:42
quelle