Sencha Touch 2 Ext.List - 以编程方式添加详细视图

时间:2012-05-14 21:33:38

标签: javascript sencha-touch extjs sencha-touch-2 ext.list

我正在尝试根据列表中的录音项添加不同的详细信息视图。

  • 我有使用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'
}

});

我找到了一个例子,但它不适用于我(推送方法不存在)

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

提前感谢!

3 个答案:

答案 0 :(得分:1)

您正在寻找的方法是

http://docs.sencha.com/touch/2-0/#!/api/Ext.Container-method-add

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

但是你所拥有的东西没有意义,realestatehome是一个列表,你不能在它下面添加一个组件。您需要阅读上面链接中的布局

答案 1 :(得分:0)

推送应该工作。你可以尝试这样的事情。

  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'
    },

希望有所帮助

答案 2 :(得分:0)

我在控制器中犯了一个错误.getMain() get main返回Ext.List,我需要具有'push'方法的Ext.navigation.View。

所以...我在我的视口(“容器”)中添加了xtype和id 我的控制器快速改变解决了我的麻烦...

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

而不是获取Ext.List对象

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

这就像魅力一样:)