Обработка сложных бизнес-правил с помощью Sencha Touch - PullRequest
2 голосов
/ 13 октября 2011

Я ценю помощь и поддержку, которую вы мне оказали для начала работы с Sencha Touch.Теперь я столкнулся с некоторыми сложными бизнес-сценариями, где мне гораздо сложнее с этим справляться.Вот мои бизнес-потребности.

  1. При успешном входе в приложение клиент sencha получает ответ объекта JSON, где присутствуют все доступные продукты и коды.Кроме того, тег состояний содержит список исключаемых товаров.Образец в формате JSON, который я вставил ниже.

  2. У меня должна быть форма, в которой мне нужно будет отобразить выпадающий список состояний и продуктов.Пользовательский интерфейс в порядке.Я сделал с этим. Но теперь сложность заключается в том, что когда я выбираю состояние, я должен исключить список продуктов из общего числа доступных продуктов.

  3. Я использовал Ajax-запрос , а затем decode метод для декодирования ответа JSON.Теперь у меня есть полный JSON как объект.

  4. У меня есть 2 магазина, один для списка товаров и другой для списка штатов. Мне не требуется синхронизация моего хранилища с сервером, так как это увеличивает использование данных.

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

Вот пример ответа JSON:

{   
    "defaultProducts": {
        "product": [
            {
                "code": "pro1",
                "name": "Product AA"
            }, {
                "code": "pro1",
                "name": "Product BB"
            }, {
                "code": "pro1-INP",
                "name": "Product CC"
            }, {
                "code": "uni1-sc",
                "name": "Product DD"
            }, {
                "code": "pro1",
                "name": "Product EE"
            }, {
                "code": "uni1-sc",
                "name": "TCO - Enhanced"
            }, {
                "code": "uni1",
                "name": "Product FF"
            }, {
                "code": "uni1",
                "name": "Product GG"
            }
        ]
    },
    "states": {
        "state": [
            {
                "excludeProducts": {
                    "excludeProduct": [
                        {
                            "code": "pro1",
                            "name": "Product BB"
                        }, {
                            "code": "pro1-INP",
                            "name": "Product CC"
                        }, {
                            "code": "pro1",
                            "name": "Product EE"
                        }, {
                            "code": "uni1",
                            "name": "Product FF"
                        }, {
                            "code": "uni1",
                            "name": "Product GG"
                        }
                    ]
                },
                "code": "AL",
                "name": "Alabama"
            }, {
                "excludeProducts": {
                    "excludeProduct": [
                        {
                            "code": "pro1",
                            "name": "Product BB"
                        }, {
                            "code": "pro1-INP",
                            "name": "Product CC"
                        }, {
                            "code": "pro1",
                            "name": "Product EE"
                        }, {
                            "code": "uni1",
                            "name": "Product FF"
                        }, {
                            "code": "uni1",
                            "name": "Product GG"
                        }
                    ]
                },
                "code": "AK",
                "name": "Alaska"
            }, {
                "excludeProducts": {
                    "excludeProduct": [
                        {
                            "code": "pro1",
                            "name": "Product BB"
                        }, {
                            "code": "pro1-INP",
                            "name": "Product CC"
                        }, {
                            "code": "uni1-sc",
                            "name": "Product DD"
                        }, {
                            "code": "pro1",
                            "name": "Product EE"
                        }, {
                            "code": "uni1-sc",
                            "name": "TCO - Enhanced"
                        }
                    ]
                },
                "code": "AZ",
                "name": "Arizona"
            }, {
                "excludeProducts": {
                    "excludeProduct": [
                        {
                            "code": "pro1",
                            "name": "Product BB"
                        }, {
                            "code": "pro1-INP",
                            "name": "Product CC"
                        }, {
                            "code": "pro1",
                            "name": "Product EE"
                        }, {
                            "code": "uni1",
                            "name": "Product FF"
                        }, {
                            "code": "uni1",
                            "name": "Product GG"
                        }
                    ]
                },
                "code": "AR",
                "name": "Arkansas"
            }
        ]
    },
    "licensedTo": "mycomp.com"
}

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

1 Ответ

0 голосов
/ 21 октября 2011

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

Вот как должен выглядеть ваш прослушиватель изменений в раскрывающемся списке состояний:

  listeners: {
        change:function(selectfield, value){
            //here you should get reference to the excludeProduct array
            var exProductArray = [];

            //then add filter to the product store like this
            productStore.clearFilter(false); // clears previous filters

            for(var i=0; i<exProductArray.length;++i){
              productStore.filter("code",exProductArray[i].code);       
            }              
        }
   },

Чтобы получить ссылку на productArray, вы можете установить valueField в раскрывающийся список состояний,code свойство, а также установите idProperty модели состояния в свойство code.Затем вы можете получить запись состояния из хранилища состояний следующим образом:

  var stateRecord = stateStore.getById(value);

Где значение этого value объекта change:function(selectfield, value){.Затем, после того, как вы получите правильную stateRecord для получения ссылки на productArray, вы должны просто сделать это:

 var exProductArray = stateRecord.excludeProducts.excludeProduct;
...