Sencha Touch 2 Ext.List - программно добавить подробный вид

Я пытаюсь добавить другой подробный вид на основе записи в списке.

  • У меня есть домашний экран, который использует компонент "Список", и это представление отображает ["Недвижимость", "Транспорт", "Работа"]... в качестве пунктов меню.
  • На основе выбранного элемента в списке, я хочу, чтобы отобразить другое представление.
    • И я хочу следовать шаблону проектирования MVC..

Вот код... App.js

Ext.application({
name: 'App',

controllers: ['Main'],
views: ['Viewport', 'HomePage'],
stores: ['HomePageItems'],
models: ['HomePageItem'],

launch: function () {
    Ext.Viewport.add(Ext.create('App.view.Viewport'));
}

});

Viewport.js

Ext.define("App.view.Viewport", {
extend: 'Ext.navigation.View',

requires: [ 'App.view.realestate.Realestate',
            'App.view.HomePage',
            'App.view.jobs.Jobs',
            'App.view.other.Other',
            'App.view.vehicles.Vehicles'
           ],

config: {
    items: [
        {
            xtype: 'homepage'
        }
    ]
}

});

HomePage.js (xtype = "homepage")

Ext.define('App.view.HomePage', {
extend: 'Ext.List',
xtype: 'homepage',
id: 'homepage',

config: {
    title: 'Oglasi',
    itemTpl: '<strong>{name}</strong><p style="color:gray; font-size:8pt">{description}</p>',
    store: 'HomePageItems',
    onItemDisclosure: true
}

});

Main.js

Ext.define('App.controller.Main', {
extend: 'Ext.app.Controller',

config: {
    refs: {
        main: '#homepage'
    },

    control: {
        'homepage': {
            disclose: 'HookUpDetailView'
        }
    }
},

HookUpDetailView: function (element, record, target, index, ev) {
    // TO DO: I have 4 differente views to load programmaticaly based on selected item in List
    //'App.view.realestate.Realestate'
    //'App.view.jobs.Jobs'
    //'App.view.other.Other'
    //'App.view.vehicles.Vehicles'
}

});

Я нашел один пример, но он не работает для меня (метод push не существует)

this.getMain().push({
        xtype: 'realestatehome'
    });

Заранее спасибо!

3 ответа

Метод, который вы ищете

http://docs.sencha.com/touch/2-0/

this.getMain().add({xtype: 'realestatehome'});

Но то, что у вас есть, не имеет смысла, realestatehome - это список, вы не можете добавить компонент под ним. Вам нужно почитать про макеты по ссылке выше

Толчок должен работать. Вы можете попробовать что-то вроде этого.

  HookUpDetailView: function (list, record) {

           if(record.data.description==='real estate'){

                  this.getRealEstate().push({
                      xtype: 'realestatehome',
                      title: record.data.description,
                      data.  record.data

           });

           if(record.data.description==='Vehicles'){

                  this.getVehicles().push({
                      xtype: 'vehicles',
                      title: record.data.description,
                      data.  record.data

           });


     }
}

И конкретный вид может выглядеть

Ext.define('App.view.RealEstateHome', {
    extend: 'Ext.Panel',
    xtype: 'realestatehome',
    config: {
        styleHtmlContent: true,
        scrollable: 'vertical',
        tpl: [
            '{description}, {example}, {example}, {example}'
        ]
    }
});

А ссылки на доступ к вашему конкретному виду должны выглядеть примерно так

refs: {
        realEstate: 'realestatehome',
        vehicles:   'vehicleshome'
    },

надеюсь, это поможет

Я сделал ошибку в контроллере this.getMain() get main возвращает Ext.List, и мне нужен Ext.navigation.View с методом push.

Итак... я добавил xtype и id в свой видовой экран ("контейнер") и быстрое изменение в моем контроллере решило мои проблемы...

refs: {
    main: '#homepage',
    container: '#container'
}

и вместо того, чтобы получить объект Ext.List

this.getContainer().push({
    xtype: 'realestatehome'
});

И эта работа, как шарм:)

Другие вопросы по тегам