我的這段代碼不斷拋出錯誤,我不明白爲什麼。集合不是一個函數或集合不是主幹中的構造函數
var id = $(ev.currentTarget).data("id");
var item = ItemCollection.getByCid(id);
alert(item.get("ItemCode"));
var qty = 1;
var cartcollection = new CartCollection();
cartcollection.add(item);
CartListView.render();
var itemcode = cartcollection.where({ItemCode: item.get("ItemCode")});
if(itemcode.length > 0){ alert("success"); }
所以我想要做的是檢查,如果CartCollection具有相同的模型已經並且如果爲真,應該只更新模型的數量atrib。現在基於該代碼它返回CartCollection不是一個函數或不是一個構造函數。爲什麼是這樣!?有任何想法嗎?由於
更新
我使用的骨幹,要求,KendoUI網格和在這一個強調所以我的代碼是這樣的:
itemlist_view.js
define([
'jquery',
'underscore',
'backbone',
'model/item_model',
'model/cart_model',
'collection/item_collection',
'collection/cart_collection',
'view/cart/cartlist_view',
'text!templates/items/itemlist.html'
],function($, _, Backbone, Item, Cart, ItemCollection, CartCollection, CartListView, ItemListTemplate){
var ItemListView = Backbone.View.extend({
el: $("#mainContainer"),
events:{
"click #itemListContainer li" : "AddToCart"
},
initialize: function(){
this.model = Item;
this.collection = ItemCollection;
this.collection.bind("reset", this.render);
},
render: function(){
var data = {
items: ItemCollection.models
}
var compiledTemplate = _.template(ItemListTemplate , data);
$("#itemContainer").html(compiledTemplate);
},
AddToCart:function(ev){
ev.preventDefault();
var id = $(ev.currentTarget).data("id");
var item = ItemCollection.getByCid(id);
alert(item.get("ItemCode"));
var qty = 1;
var cartcollection = new CartCollection();
cartcollection.add(item);
CartListView.render();
var itemcode = cartcollection.where({ItemCode: item.get("ItemCode")});
if(itemcode.length > 0){ alert("success"); }
}
});
return new ItemListView;
});
cart_collection.js
define([
'underscore',
'backbone',
'model/cart_model'
],function(_, Backbone, Cart){
var CartCollection = Backbone.Collection.extend({
model: Cart,
initialize: function(){
}
});
return new CartCollection;
});
cartlist_view.js
define([
'jquery',
'underscore',
'backbone',
'model/cart_model',
'collection/cart_collection',
'text!templates/cart/cartlist.html'
], function($, _, Backbone, Cart, CartCollection, CartListTemplate){
var Model = kendo.data.Model,
ObservableArray = kendo.data.ObservableArray;
function wrapBackboneModel(backboneModel, fields) {
return Model.define({
fields: fields,
init: function(model) {
if (!(model instanceof backboneModel)) {
model = new backboneModel(model);
}
Model.fn.init.call(this, model.toJSON());
this.backbone = model;
},
set: function(field, value) {
Model.fn.set.call(this, field, value);
this.backbone.set(field, value);
}
});
}
function wrapBackboneCollection(model) {
return ObservableArray.extend({
init: function(collection) {
ObservableArray.fn.init.call(this, collection.models, model);
this.collection = collection;
},
splice: function(index, howMany) {
var itemsToInsert, removedItemx, idx, length;
itemsToInsert = Array.prototype.slice.call(arguments, 2);
removedItems = kendo.data.ObservableArray.fn.splice.apply(this, arguments);
if (removedItems.length) {
for (idx = 0, length = removedItems.length; idx < length; idx++) {
this.collection.remove(removedItems[idx].backbone);
}
}
if (itemsToInsert.length) {
for (idx = 0, length = itemsToInsert.length; idx < length; idx++) {
this.collection.unshift(itemsToInsert[idx].backbone);
}
}
return removedItems;
}
});
}
kendobackboneCollection = wrapBackboneCollection;
kendobackboneModel = wrapBackboneModel;
var CartListView = Backbone.View.extend({
el: $("#cartContainer"),
initialize: function(){
this.collection = CartCollection;
this.model = Cart;
this.collection.bind("change", this.render);
},
render: function(){
console.log("here");
this.el.html(CartListTemplate);
var CartWrapper = kendobackboneModel(Cart, {
ItemCode: { type: "string" },
ItemDescription: { type: "string" },
RetailPrice: { type: "string" },
Qty: { type: "string" },
});
var CartCollectionWrapper = kendobackboneCollection(CartWrapper);
this.$("#grid").kendoGrid({
editable: true,
toolbar: ["create"],
columns: ["ItemDescription", "Qty", "RetailPrice"],
dataSource: {
schema: {model: CartWrapper},
data: new CartCollectionWrapper(CartCollection),
}
});
},
});
return new CartListView;
});
那麼究竟是什麼錯誤?它發生在哪裏? – tkone 2012-03-27 12:33:47
你可以發佈你創建CartCollection構造函數的代碼嗎?這聽起來像是該代碼中的原因。在這段代碼運行之前,也許你沒有創建'CartCollection'? – joshuapoehls 2012-03-27 15:36:45
@tkone錯誤是使用此代碼CartCollection.where();它說CartCollection不是一個函數。如果我將實例化它cartcollection = new CartCollection();然後使用cartcollection.where()它說CartCollection不是一個構造函數。 – jongbanaag 2012-03-28 01:14:16