2013-08-31 2 views
1

я следующий код, который должен выборки один объект в моей модели и визуализации его с шаблоном:Backbone выборки возвращает все экземпляр моей модели

productDetails: function (id) { 
     var product = new app.models.Product({id: id}); 
     product.fetch({ 
      success: function (data) { 
       console.log(data); 
       app.slider.slidePage(new app.views.ProductView({model: data}).render().$el); 
      } 
     }); 
    } 

Однако, по какой-то причине, data список всех мои объекты модели:

attributes: Object 
0: Object 
1: Object 
2: Object 
3: Object 
4: Object 
5: Object 
6: Object 
7: Object 
8: Object 
9: Object 
10: Object 
11: Object 
12: Object 
13: Object 
... 
id: "73" 

Я новичок в Backbone, так что я понятия не имею, что может привести к это ...

Вам нужен больше кода?

ProductModel.js

app.models.Product = Backbone.Model.extend({ 

    initialize: function() { 
    }, 

    sync: function (method, model, options) { 
     if (method === "read") { 
      app.adapters.product.findById(parseInt(this.id)).done(function (data) { 
       options.success(data); 
      }); 
     } 
    } 

}); 

app.models.ProductCollection = Backbone.Collection.extend({ 

    model: app.models.Product, 

    sync: function (method, model, options) { 
     if (method === "read") { 
app.adapters.product.findByName(options.data.name).done(function (data) { 
       options.success(data); 
      }); 
     } 
    } 

}); 
+0

У вас есть данные, указанные в качестве глобальной переменной или тот, который находится в более высоком объеме? Возможно, вы имеете в виду неправильные данные. – dthree

+2

С другой стороны, ваши адаптеры.product, вероятно, относятся к коллекции, а затем возвращают коллекцию в вашей функции синхронизации продукта. – dthree

+0

@DaveC, вы были правы. Моя функция 'findById' внутри моего адаптера возвращала' продукты' вместо найденного 'продукта'. –

ответ

1

Ваш adapters.product, вероятно, имея в виду коллекцию, а затем возвращая коллекцию в функции продукта sync.

решение было бы что-то вроде этого:

var findById = function (id) { 
    var deferred = $.Deferred(); 
    var product = null; 
    var l = products.length; 
    for (var i = 0; i < l; i++) { 
    if (products[i].id === id) { 
     product = products[i]; 
     break; 
    } 
    } 
    deferred.resolve(product); // HERE WAS product__s__ 
    return deferred.promise(); 
} 
+0

Спасибо. Вы могли бы хотя бы немного вообразить с данным решением ;-) –

+0

Нет твоей совершенства - я ленив и скорее скопирую твою :) – dthree

Смежные вопросы