1

モデル内の 1 つのオブジェクトを取得し、テンプレートでレンダリングする次のコードがあります。

 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"

私はバックボーンを初めて使用するので、何が原因なのかわかりません...

さらにコードが必要ですか?

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

});
4

1 に答える 1

1

おそらくコレクションを参照してから、 Product関数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();
}
于 2013-09-01T19:03:49.513 に答える