5

Ich möchte übergeben und holen Sie einen Wert aus der Ansicht, um die Verwendung einer Sammlung zu modellieren, ich bin in der Lage, den Wert in das Modell übergeben, wenn ich Sammlung verwendet wird, ist es nicht funktioniert. Ich weiß nicht, wo ist das Problem hier ist mein Code.Wie übergeben Wert von Sammlung zu Modell in backbone.js

mein Modell

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(); 
    } 

}); 

meiner Sammlung

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 

}); 

hier bin ich in Konsole bekommen ----> [], Sammlung holen Wert [object Object], Wo ist das Problem und wie wird der Wert gespeichert und abgerufen?

+1

Wussten Sie, dass .fetch() asynchroner Betrieb ist? console.log ("Sammlungsabrufwert" + JSON.stringify (collection.fetch())); würde nicht funktionieren. Kannst du Jsbin Beispiel für mehr Hilfe geben? –

+0

Ich habe Ihren Punkt nicht erhalten, bitte können Sie weitere Informationen geben @VasilVanchuk – Sport

+1

Das ist, was ich spreche: collection.fetch() liefert keine Daten zurück, verursachen holen HTTP-Anfrage und Daten werden nur auf erfolgreiche Bearbeitungsantwort Also wenn Sie wie console.log schreiben ("collection fetch value" + JSON.stringify (collection.fetch())); Sie würden keine Sammlungsdaten sehen –

Antwort

1

Try this:

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

Sie wollen machen nur ausführen, wenn Ihr holen erfolgreich ist. Die Abrufmethode wird asynchron ausgeführt. Dies bedeutet, dass alles danach noch versucht wird ausgeführt zu werden, während die Fetch-Methode immer noch ihr Ding macht. Wenn Sie die Rendermethode in den Erfolgsrückruf stellen, stellen Sie sicher, dass nichts versucht, Ihre Sammlungsdaten zu verwenden, bis Sie tatsächlich über diese Daten verfügen.

Verwandte Themen