Загрузите одну запись из JSON API с помощью Sencha Touch 2

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

В настоящее время я просто хочу сделать стандартный вид Master/Detail. Я загружаю магазин в виде списка и хотел бы щелкнуть каждый элемент списка, чтобы перейти в подробное представление. Поскольку мой первоначальный вид списка может содержать довольно много элементов, я загружаю только немного данных с помощью этого метода в свой контроллер:

viewUserCommand: function(list, record) {
      // console.log(record);
      var profileStore = Ext.getStore("Profiles");
      profileStore.setProxy({
        url: 'http://localhost:8000/profile/' + record.data.user_id
      });
      profileStore.load();

      // console.log(profileStore);

      Ext.Viewport.animateActiveItem(Ext.getCmp('profileview'), this.slideLeftTransition);

    }

Во-первых, изменение свойства url для каждого события касания кажется немного хакерским. Нет ли способа указать «this.id» или что-то в этом роде, а затем передать это в мой магазин? Или это потребует загрузки всей таблицы БД в объект?

Я могу console.log вернуть этот метод, и это именно то, что я хочу. Как заполнить подробный вид? Я пытался использовать компонент DataView, но он не показывает никаких данных. Примеры на веб-сайте sencha довольно скудны и относительно бесконтекстны. Это означает, что даже копирование и вставка их примеров, скорее всего, не удастся. (Все примеры, которые я пытался использовать Ext.modelMgr.getModel(), не увенчались успехом.)

Я знаю, что отчасти это новая структура, и я, вероятно, упускаю огромную зияющую дыру в своем понимании этого, но кто-нибудь знает?


person Jim Wharton    schedule 17.07.2012    source источник


Ответы (1)


Предлагаю вам ознакомиться с документами, там есть пример загрузки одной модели:

http://docs.sencha.com/touch/2-0/#!/api/Ext.data.Model

Ext.define('User', {
    extend: 'Ext.data.Model',

    config: {
        fields: ['id', 'name', 'email'],
        proxy: {
            type: 'rest',
            url : '/users'
        }
    }
});

//get a reference to the User model class
var User = Ext.ModelManager.getModel('User');

//Uses the configured RestProxy to make a GET request to /users/123
User.load(123, {
    success: function(user) {
        console.log(user.getId()); //logs 123
    }
});
person Evan Trimboli    schedule 18.07.2012
comment
Нет, к сожалению, документы, касающиеся загрузки моделей (обычно все, что связано с менеджером моделей), редко работают для меня: Uncaught TypeError: Cannot call method 'load' of undefined - person Jim Wharton; 18.07.2012
comment
Ну, я не знаю, как выглядит ваш код, поэтому я не могу комментировать дальше. - person Evan Trimboli; 18.07.2012
comment
Хорошо, я закину это на Bitbucket. У меня есть модель, объявленная в app.js, так что это будет единственная другая вещь.... - person Jim Wharton; 18.07.2012
comment
У вас нет прокси, определенного в модели, поэтому вы никогда не сможете просто загрузить одну запись. Посмотрите на пример кода, который я разместил. - person Evan Trimboli; 18.07.2012
comment
Ваш работает, потому что вы определили класс в том же файле. Моя проблема заключалась в том, что var User = Ext.ModelManager.getModel('User'); не возвращает ссылку на модель. Мне нужно указать полное имя объекта в пространстве имен. Я ценю, что вы посмотрели, и я отмечу ваш ответ как правильный. Спасибо! - person Jim Wharton; 18.07.2012