2012-08-06 12 views
5

Lo so che è più spesso fatto in modo opposto, ma nel mio specifico caso d'uso che avevo bisogno di avere un modello PostsTimes con un riferimento a una raccolta (di un altro modello Post). In questo momento sto cercando:Backbone: come posso fare riferimento a una raccolta da un modello

var Posts = Backbone.Collection.extend({ 
    model: Post 
}); 
var posts = new Posts(); // my collection 



var PostsTimes = Backbone.Model.extend({ 
    url: "api/times.php", 
    initialize: function(options){ 
     this.posts = options.posts; 
    }, 
    test: function(){ 
     console.log(this.posts); 
    } 
}); 

var poststimes = new PostsTimes({posts: posts}); 

Ma this.posts in PostsTimes rimane sempre undefined. C'è un modo per farlo senza definire una variabile globale?

+0

ciò che è 'Tampon.posts'? alcuni dati o l'altra raccolta? –

+0

@ClaudiuHojda Siamo spiacenti, questo è un errore di battitura. Risolvilo adesso. –

risposta

4

La struttura di ciò che si ha è corretta, quindi la ragione per cui si registrerebbe undefined è perché la this nella propria funzione test è qualcosa di diverso dall'istanza del modello.

Così il vostro PostsTimes sarebbe diventato

var PostsTimes = Backbone.Model.extend({ 
    url: "api/times.php", 
    initialize: function(options){ 
     _.bindAll(this); 
     this.posts = options.posts; 
    }, 
    test: function(){ 
     console.log(this.posts); 
    } 
}); 
+0

Beh, no, questa è la cosa, il Modello non fa parte della Collezione (renderò la domanda più chiara) –

+0

@julien_c Spiacente ho frainteso, ho modificato la mia risposta per riflettere questo. –

+0

Questo era, grazie! Mi dimentico sempre di questa cosa ... I metodi di istanza non possono essere associati all'istanza di default? –

1
var PostsTimes = Backbone.Model.extend({ 
    url: "api/times.php", 
    initialize: function(options){ 
    _.bindAll(this, 'test'); 
    this.posts = options.posts; 
    }, 
    test: function(){ 
    console.log(this.posts); 
    } 
}); 
Problemi correlati