как передать значение из коллекции в модель в backbone.js

Я хочу передать и получить значение из представления для моделирования использования коллекции, я могу передать значение в модель, когда я использовал коллекцию, она не работает. Я не знаю, в чем проблема, вот мой код .

моя модель

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

});

моя коллекция

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

});

здесь я попадаю в консоль----> [],значение выборки коллекции[объект объекта], где проблема и как сохранить и получить значение.


person Sport    schedule 03.04.2014    source источник
comment
Знаете ли вы, что .fetch() является асинхронной операцией? console.log(значение выборки коллекции +JSON.stringify(collection.fetch())); не будет работать. Можете ли вы привести пример jsbin для получения дополнительной помощи?   -  person Vasiliy Vanchuk    schedule 04.04.2014
comment
я не понял, пожалуйста, не могли бы вы дать больше информации @VasilVanchuk   -  person Sport    schedule 05.04.2014
comment
Вот о чем я говорю: collection.fetch() не возвращает данные коллекции, потому что fetch делает http-запрос, и данные будут доступны только при успешной обработке ответа. Поэтому, когда вы пишете как console.log(значение выборки коллекции +JSON.stringify(collection.fetch())); вы не увидите данные коллекции   -  person Vasiliy Vanchuk    schedule 06.04.2014


Ответы (1)


Попробуй это:

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

Вы хотите выполнить рендеринг только после успешной выборки. Метод выборки выполняется асинхронно. Это означает, что все после него все еще будет пытаться выполниться, в то время как метод fetch все еще выполняет свою работу. Поместив метод рендеринга в обратный вызов успеха, вы гарантируете, что ничто не попытается использовать данные вашей коллекции, пока вы действительно не получите эти данные.

person Katherine C    schedule 07.04.2014