Andreas Köberle
Andreas Köberle

Reputation: 110892

Backbone fetch doesn't work as expected

When I call fetch on my collection the app is calling the server and server returns an array of object. In the success function of the fetch call I've got an empty collection and the original response holding all objects that was responded by the server.

Collection

var OpenOrders = BaseCollection.extend({
    model: Order,
    url: baseUrl + '/api/orders?status=1'
});

Model

var Order = BaseModel.extend(

    {
        url:baseUrl + "/api/order",
        defaults:{
            order_items: new OrderList(),
            location: 1,
            remark: "remark"
        },

        initialize: function(options) {

            var orderItems = this.get('order_items');
            if (orderItems instanceof Array) {
                orderItems = new OrderList(orderItems);
                this.set({'order_items': orderItems})
            }
            orderItems.bind('change', _.bind(function() {
                this.trigger('change')
            }, this))
                .bind('remove', _.bind(function() {
                this.trigger('change')
            }, this));
            return this;
        },

    sum: function() {
        return  this.get('order_items').sum();
    },

    validate: function() {
        return !!this.get('order_items').length;
    },

    add:function(product) {
        this.get('order_items').add(product);

    },
    remove: function(product) {
        this.get('order_items').remove(product);

    }
);

Fetching the collection

this.collection.fetch({success:_.bind( function(collection, response){
            console.log('OpenOrdersListView', collection.toJSON())
            // logs []
            console.log('OpenOrdersListView', response)
            // logs [Object, Object ...]

        }, this)})

Upvotes: 0

Views: 914

Answers (1)

Andreas Köberle
Andreas Köberle

Reputation: 110892

Damm, its the validate method in my model. I've though validate have to return a boolean, but after reading the docs, it has to return an error message only if the model is not valid.

 validate: function() {
         if (!this.get('order_items').length){
             return 'set minium of one product before save the order'
         }
    },

Upvotes: 2

Related Questions