2012-04-21 14 views
7

Ho un modello di nome persona:come accedere a modelli di dati da una vista in backbone.js

var person = Backbone.Model.extend({ 
     initialize: function(){ 
     console.log('cool'); 
     }, 
     defaults:{ 
      names:['a','k','d','s','h','t'] 
     } 
    }) 

Ora ho una visione:

var person_view = Backbone.View.extend({ 
    model : person, 
    output: function(){ 
     console.log(this.model.get('names')) 
    } 
}); 

creato un oggetto della vista:

var obj = new person_view() 

Provate a nomi di accesso:

obj.output() 

Ma ho ottenuto questo errore:

TypeError: Object function(){ parent.apply(this, arguments); } has no method 'get' 

Puoi mostrarmi come fare le cose correttamente Ho appena cominciato a conoscere backbone.js quindi per favore abbiate pazienza con me?.

risposta

9

Dovete inizializzare il modello prima che si possa accedervi:

var person_view = Backbone.View.extend({ 
    initialize: function() { 
     this.model = new person(); 
    }, 
    output: function(){ 
     console.log(this.model.get('names')) 
    } 
}); 
5

Invece di passare il modello quando si extend la vista, ti consigliamo di passare quando si costruisce una nuova vista:

var person_view = Backbone.View.extend({ 
    output: function(){ 
    console.log(this.model.get('names')) 
    } 
}); 

var obj = new person_view({ 
    model : new person() 
}); 
1

Il tuo "person_view" non può accedere a nessun modello (che è previsto da quella vista), poiché nessun modello è ancora stato creato, quando stai dichiarando "person_view" e chiamando la sua funzione. Prima fare un modello e poi passarlo a vista quando si dichiara che "person_view".

var model_person_for_view= new person(); 
var obj = new person_view(model:model_person_for_view); 
obj.output(); 
Problemi correlati