Dieser Code von mir bleibt auf Wurffehler ich verstehe nicht warum. nurSammlung ist keine Funktion oder Sammlung ist kein Konstruktor in Backbone
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"); }
Also, was ich tun möchte, ist zu überprüfen, ob die CartCollection das gleiche Modell hat bereits und wenn sie wahr sollte es die Menge Atrib des Modells aktualisieren. Basierend auf diesem Code gibt es zurück CartCollection ist keine Funktion oder kein Konstruktor. Warum zum Teufel ist das? Irgendwelche Ideen? Dank
aktualisieren
Ich Rückgrat verwenden, erfordern, KendoUI Gitter und unterstreichen auf diese so meinen Code ist dies:
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;
});
Also was genau ist dein Fehler und wo tritt er auf? – tkone
Können Sie den Code posten, in dem Sie Ihre 'CartCollection'-Konstruktorfunktion erstellen? Es klingt wie die Ursache in diesem Code sein wird. Vielleicht erstellen Sie 'CartCollection' nicht, bevor dieses Snippet ausgeführt wird? – joshuapoehls
@ tkone der Fehler verwendet diesen Code CartCollection.where(); es sagt CartCollection ist keine Funktion. Wenn ich es instanziiere cartcollection = new CartCollection(); Verwenden Sie dann cartcollection.where() sagt es CartCollection ist kein Konstruktor. – jongbanaag