Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 30.08.2012, 11:09
Новичок на форуме
Отправить личное сообщение для korish Посмотреть профиль Найти все сообщения от korish
 
Регистрация: 30.08.2012
Сообщений: 2

Корзина 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'));
                            }
                    }
                }
Ответить с цитированием
  #2 (permalink)  
Старый 30.08.2012, 13:02
Аватар для Ex_Soft
Профессор
Отправить личное сообщение для Ex_Soft Посмотреть профиль Найти все сообщения от Ex_Soft
 
Регистрация: 19.12.2009
Сообщений: 164

1. Ext.data.Store.getById()
2. Ext.data.Model.set()
__________________
"Helo, word!" - 17 errors 56 warnings

Последний раз редактировалось Ex_Soft, 30.08.2012 в 13:14.
Ответить с цитированием
  #3 (permalink)  
Старый 31.08.2012, 13:39
Новичок на форуме
Отправить личное сообщение для korish Посмотреть профиль Найти все сообщения от korish
 
Регистрация: 30.08.2012
Сообщений: 2

сделал вот так:
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});
					}
				}
						
			}
		};


теперь когда первым добавляется одинаковый товар то его количество изменяется, а если добавить такой которого нету, то он добавляется по две строки, четыре, восемь и так далее. Проблема в цикле, но как мне без него обойтись или подскажите как исправить это?
Ответить с цитированием
  #4 (permalink)  
Старый 01.09.2012, 00:06
Аватар для Ex_Soft
Профессор
Отправить личное сообщение для Ex_Soft Посмотреть профиль Найти все сообщения от Ex_Soft
 
Регистрация: 19.12.2009
Сообщений: 164

Сообщение от korish Посмотреть сообщение
Проблема в цикле, но как мне без него обойтись или подскажите как исправить это?
Скажите, Вы топик читаете по диагонали:
Сообщение от Ex_Soft Посмотреть сообщение
1. Ext.data.Store.getById()
?
__________________
"Helo, word!" - 17 errors 56 warnings
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
GridPanel "теряет" свой store при многократном вызове экземпляров GridPanel Lokich ExtJS 1 09.09.2011 10:12
Корзина на JS с использованием COOKIE vah-smile Элементы интерфейса 3 05.03.2011 16:37
gridPanel двойное контекстное меню index0h ExtJS 0 16.12.2010 01:09
Ext. GridPanel Раскраска колонок serega063 ExtJS 10 06.06.2010 12:49
Горизонтальная прокрутка в gridPanel mwnuke ExtJS 2 09.11.2009 19:25