Установить магазин с функцией в app.js не работает в производственной сборке?

Я пытаюсь создать представление формы поиска на основе следующего примера Sencha: http://try.sencha.com/touch/2.0.0/examples/list-search/viewer.html

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

Чтобы настроить магазин, я использую это в конфигурации:

магазин: Preconisations.app.getStoreAdherents(),

где Preconisations — это имя моего проекта, а getStoreAdherents — функция, установленная в app.js:

getStoreAdherents: function () {
    if (!this.storeAdherents) {
        var gestionAdherent = new DAL_Adherent(); // custom classes 
        var tc = gestionAdherent.GetAll(); // and functions which returns a json string with data

        this.storeAdherents = Ext.create('Ext.data.Store', {
            model: "Preconisations.model.ADHERENT",
            data: tc,
            sorters: 'nom',
            groupField: 'code'
        });
    }

    return this.storeAdherents;
}

Теперь все работает нормально, но когда я делаю тестирование или производственную сборку, у меня возникает эта ошибка:

Uncaught TypeError: не удается вызвать метод getStoreAdherents неопределенного

в определении магазина...

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

У кого-нибудь была эта проблема? Или как вы динамически настраиваете магазин с функцией?

Спасибо... Я бьюсь головой об стену по этому поводу...


person user3379524    schedule 04.03.2014    source источник


Ответы (2)


Понятно, что у вас есть проблема с зависимостью сборки в Ext Build. В опубликованном фрагменте кода есть вероятность, что вы пропустили добавление «Preconisations.model.ADHERENT» в путь к классу. Если это так, добавьте следующее в ваш app.js

requires: ["Preconisations.model.ADHERENT"]

Если проблема не устранена, выполните следующую диагностику: запустите приложение (режим разработки) в Google Chrome с открытой консолью; Ищите предупреждения, в которых говорится, что конкретный класс загружается синхронно, и добавляйте оператор require для этих классов.

person Sunish    schedule 04.03.2014
comment
Спасибо за Ваш ответ. К сожалению, я не думаю, что есть проблема с моим getStoreAdherents. Кажется, что функция в app.js не инициализируется при установке конфигурации магазина. В консоли Google Chrome нет предупреждений и ошибок (это первое, на что я смотрю). Я заметил, что когда я помещаю фиксированное хранилище вместо имени функции, все хорошо даже в сборке. - person user3379524; 05.03.2014
comment
Здравствуйте, у меня недавно была похожая ситуация. Я обнаружил, что App.js может не инициализироваться в рабочей сборке, если у вас нет ‹code›requires: [Preconisations.model.ADHERENT]‹/code›. (Есть альтернативные способы, которые вы можете попробовать...) Класс модели может быть даже не загружен, если он больше нигде не используется... - person Sunish; 06.03.2014

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

Я не указываю магазин: xxxx в представлении. Вместо этого в контроллере я помещаю этот код в функцию запуска:

this.getMainView().setStore(this.getStoreAdherents());

где getMainView — это ссылка на мое представление.

Это все !

person user3379524    schedule 05.03.2014