2012-04-21 15 views
7

que tiene un modelo de persona llamada:cómo acceder a los modelos de datos de una vista en Backbone.js

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

Ahora tengo una visión:

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

crea un objeto de la vista:

var obj = new person_view() 

Trate de nombres de acceso:

obj.output() 

Pero tengo este error:

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

¿Me puede mostrar cómo hacer las cosas bien he hecho más que empecé a conocer Backbone.js así que tenga conmigo?.

Respuesta

9

Usted tiene que inicializar su modelo antes de poder acceder a él:

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

En lugar de pasar el modelo cuando extend la vista, tendrá que pasar cuando se construye un nuevo punto de vista:

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

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

Su "person_view" no puede acceder a ningún modelo (lo que se espera de esa vista), ya que aún no se ha creado ningún modelo, cuando declara "person_view" y llama a su función. Primero haga un modelo y páselo para verlo al declarar esa "persona_vista".

var model_person_for_view= new person(); 
var obj = new person_view(model:model_person_for_view); 
obj.output(); 
Cuestiones relacionadas