5

Voglio passare e recuperare un valore dalla vista per modellare l'uso di una raccolta, sono in grado di passare il valore nel modello quando ho usato la raccolta non è lavoro. non so dove sia il problema qui è il mio codice.come passare il valore Dalla raccolta al modello in backbone.js

mio modello

var PostwallModel=Backbone.Model.extend({ 

    urlRoot: 'http://localhost:3400/post', 
    idAttribute: '_id', 
    defaults : { 
     userId: '', 
     userName: " ", 
     postmsg : "unknown" 
    }, 

    initialize: function() { 
     console.log("<><><>post model initialize<><><><><>"); 
    }, 

    // Delete item (row) from 
    clear: function() { 
     this.destroy(); 
    } 

}); 

mia collezione

var PostwallCollection = Backbone.Collection.extend({ 
    url: 'http://localhost:3400/post', 
    model: PostwallModel 
}); 

**here is my view** 

var PostwallView = Backbone.View.extend({ 

    el: $("#page"), 
    template: _.template(PostwallTemplate), 

    events: { 
     'click #postinwall'  : 'submitpost', 
    }, 

    initialize: function() { 
     console.log("_______postmodel"); 
     this.model = new PostwallModel(); 
     var obj= new PostwallModel(); 
     obj.set({userId:'123',userName:"str ji",postmsg:'the post is here'}); 
     console.log(obj.get('postmsg')); 
     obj.toJSON(); 

     console.log(JSON.stringify(obj)); 

     // console.log(obj.get('userName')); 

     var collection = new PostwallCollection(); 

     _.bindAll(this, 'submitpost'); 

     console.log(collection); 
     collection.add(obj,{id:1}); 
     console.log("collection"+collection); 
     console.log("collection fetch value "+JSON.stringify(collection.fetch())); 
     this.render(); 
    }, 

    render: function() { 
     alert(" render function"); 
    }, 

    submitpost: function(e) { 
     //Save post model to server data 
     e.preventDefault(); 
     var post_data = JSON.stringify(this.getFormData(this.$el.find('form'))); 
     // 
     //this.model.save(post_data); 
     this.model.set(post_data); 
     this.collection.add(this.model); 
     return false 
    }, 

    //Auxiliar function 
    //how to get data from textarea 

}); 

Eccomi entrare in console ----> [], la raccolta recuperare valore [object Object], dov'è il problema e come salvare e recuperare il valore.

+1

lo sapevate che .fetch() è un'operazione asincrona? console.log ("valore di recupero della raccolta" + JSON.stringify (collection.fetch())); non funzionerebbe Puoi dare un esempio di jsbin per ulteriore aiuto? –

+0

non ho capito il tuo punto, per favore puoi darmi qualche informazione in più @VasilVanchuk – Sport

+1

Ecco di cosa sto parlando: collection.fetch() non restituisce i dati della raccolta, perché fetch effettua la richiesta http e i dati saranno accessibili solo su risposta all'elaborazione riuscita. Quindi quando scrivi come console.log ("valore di recupero della raccolta" + JSON.stringify (collection.fetch())); non vedresti i dati della collezione –

risposta

1

Prova questo:

var self = this; 
collection.fetch()({ 
    success: function (data) { 
     console.log("collection fetch value "+data); 
     self.render(); 
    } 
}); 

Si desidera eseguire solo rendere una volta che il recupero è successo. Il metodo di recupero viene eseguito in modo asincrono. Questo significa che dopo tutto continuerà a funzionare mentre il metodo di recupero sta ancora facendo le sue cose. Inserendo il metodo di rendering nella callback di successo, si garantisce che nulla cerchi di utilizzare i dati della raccolta finché non si dispone effettivamente di tali dati.