Hallo, ich habe eine Sammlung und zwei Ansichten. In meiner Ansicht1 füge ich Daten zu meiner Sammlung hinzu und in view2 werden alle Änderungen an der Sammlung gerendert und angezeigt. Aber ich kann es nicht zur Arbeit bringen. Das Problem ist ursprünglich, ich mache dasZugriff auf Sammlung auf zwei Ansichten in backbone.js
return new CartCollection();
Aber sie sagen, es ist eine schlechte Praxis, also entferne ich es geändert. Aber wenn ich die Warenkorbsammlung in View1 instanziiere, würde es hinzufügen, aber es scheint, dass View2 die Änderungen nicht sieht und nichts rendert.
Irgendwelche Ideen?
Hier ist meine Warenkorb-Sammlung.
define([
'underscore',
'backbone',
'model/cart'
], function(_, Backbone, CartModel) {
var CartCollection = Backbone.Collection.extend({
model : CartModel,
initialize: function(){
}
});
return CartCollection;
});
Hier ist meine itemView (view1)
AddToCart:function(ev){
ev.preventDefault();
//get data-id of the current clicked item
var id = $(ev.currentTarget).data("id");
var item = this.collection.getByCid(id);
var isDupe = false;
//Check if CartCollection is empty then add
if(CartCollection.length === 0){
CartCollection.add([{ItemCode:item.get("ItemCode"),ItemDescription:item.get("ItemDescription"),SalesPriceRate:item.get("RetailPrice"),ExtPriceRate:item.get("RetailPrice"),WarehouseCode: "Main",ItemType : "Stock",LineNum:1 }]);
}else{
//if check if the item to be added is already added, if yes then update QuantityOrdered and ExtPriceRate
_.each(CartCollection.models,function(cart){
if(item.get("ItemCode") === cart.get("ItemCode")){
isDupe = true;
var updateQty = parseInt(cart.get("QuantityOrdered"))+1;
var extPrice = parseFloat(cart.get("SalesPriceRate") * updateQty).toFixed(2);
cart.set({ QuantityOrdered: updateQty });
cart.set({ ExtPriceRate: extPrice });
}
});
//if item to be added has no duplicates add new item
if(isDupe == false){
var cartCollection = CartCollection.at(CartCollection.length - 1);
var lineNum = parseInt(cartCollection.get("LineNum")) + 1;
CartCollection.add([{ItemCode:item.get("ItemCode"),ItemDescription:item.get("ItemDescription"),SalesPriceRate:item.get("RetailPrice"),ExtPriceRate:item.get("RetailPrice"),WarehouseCode: "Main",ItemType : "Stock",LineNum:lineNum}]);
}
}
CartListView.render();
}
Mein cartview (view2)
render: function(){
this.$("#cartContainer").html(CartListTemplate);
var CartWrapper = kendobackboneModel(CartModel, {
ItemCode: { type: "string" },
ItemDescription: { type: "string" },
RetailPrice: { type: "string" },
Qty: { type: "string" },
});
var CartCollectionWrapper = kendobackboneCollection(CartWrapper);
this.$("#grid").kendoGrid({
editable: true,
toolbar: [{ name: "save", text: "Complete" }],
columns: [
{field: "ItemDescription", title: "ItemDescription"},
{field: "QuantityOrdered", title: "Qty",width:80},
{field: "SalesPriceRate", title: "UnitPrice"},
{field: "ExtPriceRate", title: "ExtPrice"}
],
dataSource: {
schema: {model: CartWrapper},
data: new CartCollectionWrapper(CartCollection),
}
});
},
Wie übergeben Sie den Verweis auf die CartCollection-Instanz zwischen den beiden Ansichten? Dies ist wahrscheinlich der Punkt, an dem das Problem besteht. –
Ich bin mir nicht wirklich sicher, aber ich habe diesen Code in beiden Ansichten hinzugefügt. var cartcollection = neu CartCollection(); Mache ich das richtig? – jongbanaag