Sencha Touch - расширяющийся магазин - вызов конструктора - PullRequest
0 голосов
/ 02 февраля 2012

Я играю с Сенчей и создал список с магазином и моделью:

главный:

Ext.Loader.setConfig({enabled: true});

Ext.application({ 
viewport: {
    autoMaximize: false
},                                                                                                                                                                 
name: 'Sencha',                                                                                                                                                                  

launch: function() {     
    Ext.create('Ext.List', {
        fullscreen: true,

        store: Ext.create('store.Test', {
        }),

        itemTpl: '{lastName}, {firstName} Age: {age}'
    });
}                                                                                          
});

магазин

Ext.define('store.Test', {
extend: 'Ext.data.Store',

model: 'model.User',
data: [
    { firstName: 'Ed',    lastName: 'Spencer', age: 30 },
    { firstName: 'Tommy', lastName: 'Maintz', age: 41 },
    { firstName: 'Aaron', lastName: 'Conran', age: 24 },
    { firstName: 'Jamie', lastName: 'Avins', age: 76 }
]
});

Модель:

Ext.define('model.User', {
extend: 'Ext.data.Model',
fields: [
    { name: 'firstName', type: 'string' },
    { name: 'lastName', type: 'string' }
]
});

На данный момент все работает нормально.

Затем я создал второй магазин, в котором есть еще одно поле 'возраст'. Теперь я хочу передать в магазин параметр «модель», чтобы можно было «переключаться» между разными моделями. Я пробовал что-то вроде этого:

магазин

Ext.define('store.Test', {
extend: 'Ext.data.Store',
myModel: null,

constructor : function(model) {
    myModel = model;
}, 

model: this.myModel,

data: [
    { firstName: 'Ed',    lastName: 'Spencer', age: 30 },
    { firstName: 'Tommy', lastName: 'Maintz', age: 41 },
    { firstName: 'Aaron', lastName: 'Conran', age: 24 },
    { firstName: 'Jamie', lastName: 'Avins', age: 76 }
]
});

и в основном файле:

[...]
        store: Ext.create('store.Test', {
           model: 'model.UserWithAge'
        }),
[...]

Но Google Chrome дает мне:

Uncaught TypeError: Object [object Object],[object Object],[object Object],[object Object] has no method 'getRange'

Есть какие-нибудь намеки на то, что я сделал неправильно?

1 Ответ

0 голосов
/ 03 февраля 2012

Не бери в голову, это было намного проще, чем я думал.Вместо того, чтобы возиться с конструкторами или чем-то в этом роде, достаточно просто передать модель при создании магазина, как я уже сделал:

main:

[...]
    store: Ext.create('store.Test', {
       model: 'model.UserWithAge'
    }),
[...]

store:

Ext.define('store.Test', {
extend: 'Ext.data.Store',

model: 'model.User', //only set in case that model is not passed when created

data: [
    { firstName: 'Ed',    lastName: 'Spencer', age: 30 },
    { firstName: 'Tommy', lastName: 'Maintz', age: 41 },
    { firstName: 'Aaron', lastName: 'Conran', age: 24 },
    { firstName: 'Jamie', lastName: 'Avins', age: 76 }
]

});

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...