Javascript-форум (https://javascript.ru/forum/)
-   ExtJS (https://javascript.ru/forum/extjs/)
-   -   Корзина Gridpanel (https://javascript.ru/forum/extjs/31212-korzina-gridpanel.html)

korish 30.08.2012 11:09

Корзина Gridpanel
 
Подскажите пожалуйста. Решил сделать список товара и корзину при помощи двух Grid'ов.
Вот так передаю в Grid(корзину) все параметры

stores.add({product_id: pi, name: n, price: p, unit: u, quantity: q, summary: p*q});


Сам Grid(корзина) выглядит так

Ext.define('Cart', {
        extend: 'Ext.data.Model',
        fields: [
           {name: 'product_id', type: 'int'},
           {name: 'name'},
           {name: 'price'},
           {name: 'unit'},
           {name: 'quantity'},
           {name: 'summary'}
        ],
        idProperty: 'product_id'
    });
 
var stores = Ext.create('Ext.data.ArrayStore', {
        model: 'Cart',
    });
 
    var cart = Ext.create('Ext.grid.Panel', {
        store: stores,
        stateful: true,
        stateId: 'cartGrid',
        columns: [
            {
                text     : 'Код',
                width    : 75,
                sortable : true,
                dataIndex: 'product_id'
            },
            {
                text     : 'Наименование',
                flex     : 1,
                sortable : false,
                dataIndex: 'name'
            },
            {
                text     : 'Количество',
                width    : 75,
                sortable : true,
                dataIndex: 'quantity',
                editable : true
            },
            {
                text     : 'Ед.изм',
                width    : 75,
                sortable : true,
                renderer : change,
                dataIndex: 'unit'
            },
            {
                text     : 'Цена',
                width    : 75,
                sortable : true,
                renderer : 'usMoney',
                dataIndex: 'price'
            },
            {
                text     : 'Сумма',
                width    : 85,
                sortable : true,
                renderer : 'usMoney',
                dataIndex: 'summary',
                }  
            }



Возможно, это неправильное решение но работает . Вопрос стал такой когда добавляю одинаковый товар он создается как дополнительная строка. Подскажите как сделать так что бы товар не создавал новую строку, а приплюсовывался в уже добавленный товар?

Пробовал вот такую функцию сделать, но не смог изменить значение в гриде

if (cart.getStore().data.length == 0) {
                    stores.add({product_id: pi, name: n, price: p, unit: u, quantity: q, summary: p*q});
                    alert('==0');
                }
                else {
                    for (var i = 0; i < cart.getStore().data.length; i++) { 
                        var rec = stores.getAt(i);
                            if (rec.get('product_id') != pi){
                                stores.add({product_id: pi, name: n, price: p, unit: u, quantity: q, summary: p*q});
                            } else {
                                alert(rec.get('product_id'));
                            }
                    }
                }

Ex_Soft 30.08.2012 13:02

1. Ext.data.Store.getById()
2. Ext.data.Model.set()

korish 31.08.2012 13:39

сделал вот так:
function AddToCart(pi, n, p, u, q){
			if (cart.getStore().data.length == 0) {
				stores.add({product_id: pi, name: n, price: p, unit: u, quantity: q, summary: p*q});
			}
			else {
				for (var i = 0; i < cart.getStore().data.length; i++) {
					var rec = stores.getAt(i);				
					if (rec.get('product_id') == pi){
						rec.beginEdit();
						rec.set('quantity', parseInt(rec.get('quantity'))+1);
						rec.endEdit();						
					}
					else {
						stores.add({product_id: pi, name: n, price: p, unit: u, quantity: q, summary: p*q});
					}
				}
						
			}
		};


теперь когда первым добавляется одинаковый товар то его количество изменяется, а если добавить такой которого нету, то он добавляется по две строки, четыре, восемь и так далее. Проблема в цикле, но как мне без него обойтись или подскажите как исправить это?

Ex_Soft 01.09.2012 00:06

Цитата:

Сообщение от korish (Сообщение 201976)
Проблема в цикле, но как мне без него обойтись или подскажите как исправить это?

Скажите, Вы топик читаете по диагонали:
Цитата:

Сообщение от Ex_Soft (Сообщение 201658)

?


Часовой пояс GMT +3, время: 02:39.