Sencha Touch - Как получить ссылку на экземпляр класса - PullRequest
0 голосов
/ 29 ноября 2011

Я создаю экземпляр класса при нажатии кнопки. Как получить ссылку на этот экземпляр класса вне функции обратного вызова кнопки?

handler: function() {
    var formValues = Ext.getCmp('DonateItemForm').getValues(),
        itemDetails = Ext.create('App.model.ItemDetails', formValues);
}

Редактировать: без использования глобального

Ответы [ 2 ]

1 голос
/ 02 декабря 2011

Вы должны хранить экземпляры модели в контроллере, который управляет вашей панелью (просмотр). Однако, если вы не пишете код в соответствии с шаблоном модель-представление-контроллер, вы можете прикрепить его к форме пожертвования:

Ext.getCmp('DonateItemForm').itemDetails = itemDetails;

Но основная идея должна быть ясной: Каждый раз, когда вы хотите получить доступ к экземпляру модели, просто просмотрите объект, который управляет им (либо контроллер формы, либо сама форма).

[править]

Чтобы сохранить ваши данные в контроллере, вы должны сначала отправить их этому контроллеру:

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

handler: function() {
    var formValues = Ext.getCmp('DonateItemForm').getValues();
    var itemDetails = Ext.create('App.model.ItemDetails', formValues);   

    Ext.dispatch({
        controller: "YourController",
        action: 'MethodOnYourController',
        yourDetails: itemDetails
    });
}

"yourDetails" теперь будет содержать нужный вам itemDetails. Конечно, вы можете назвать его как угодно, и можете добавить больше участников в отправленное сообщение, если хотите.

Теперь вам нужно создать метод с именем «MethodOnYourController», который может перехватить это событие:

YourController = Ext.extend(Ext.Controller, {
    MethodOnYourController: function(options)
    {
        this.itemDetails = options.yourDetails; // get the "yourDetails" that you added and store it in this controller
    }
});

Я не тестировал этот код, но идея должна быть достаточно ясной.

0 голосов
/ 29 ноября 2011
var itemDetails;

//...
handler: function() {
    var formValues = Ext.getCmp('DonateItemForm').getValues();
    itemDetails = Ext.create('App.model.ItemDetails', formValues);
}
//...

Просто создайте глобальную переменную (вне обработчика) и назначьте ее в обработчике

...