2012-11-21 123 views
2

我不確定我瞭解如何在Sencha Touch 2應用中使用配置文件視圖。針對不同配置文件加載不同視圖

Ext.define(App.view.phone.PhonePanel, { 
    extend: 'Ext.tab.Panel', 
    xtype: 'Compare' 
    config: { 
     items: [ 
      { xtype: 'PanelA' }, 
      { xtype: 'Panel B' } 
     ] 
    } 
}) 

Ext.define(App.view.tablet.TabletPanel, { 
    extend: 'Ext.Panel', 
    xtype: 'Compare' 
    config: { 
     layout: 'vbox', 
     items: [ 
      { xtype: 'PanelA', flex: 1 }, 
      { xtype: 'Panel B', flex: 1 } 
     ] 
    } 
}) 

然後在手機配置文件,它增加了「PhonePanel」作爲視圖,以及平板配置文件添加了「TabletPanel」;然後當這個特定的配置文件被加載時,它只會加載這些額外的視圖。

我遇到的問題是,煎茶從兩個配置文件加載文件,並做

this.getAview().push({xtype:'Compare'}); 

當手機情景模式後,它實際上推動了平板電腦的版本的xtype的。這裏發生了什麼?

回答

1

您正在使用相同的xtype兩次。

將xtype想象爲組件的短名稱。每個組件都需要有一個唯一的短名稱,否則它只會被更新的定義覆蓋。

將上面的兩個組件改爲xtype: 'tabletcompare'xtype: 'phonecompare'之類的東西。

或者

this.getAview().push({xtype:'phonecompare'}) 

引用對象時。

希望這會有所幫助!

+1

幫助,但引發更多問題。我的印象是,使用配置文件是一種限制文件加載數量的方式(但在手機配置文件處於活動狀態時,它仍會加載平板電腦查看文件)。 我的目標是能夠共享導航和控制器,但只加載適合設備的視圖。 即使使用if語句檢查每個push(),我遇到了僅將Panel1和Panel2加載到TabletPanel中的問題。 – andyjv

+1

很高興幫助。多分辨率環境可以通過多種方式處理。一種方法是:爲兩個環境製作一個標準前綴,並將所使用的一個保存在全局變量中。因此,在運行時,您會根據分辨率檢測平板電腦或手機,然後存儲像this.resolution ='phone'這樣的變量;那麼當你調用要呈現的視圖時,你可以這樣做this.getAview()。push({xtype:resolution +'compare'});這種方法的缺點是,您需要以編程方式調用每個視圖元素的渲染效率,這可能是效率低下或幾乎不可能的。 – BBaker

+0

我傾向於使用單獨的文件夾和文件來容納我的主視圖腳手架,但隨後使用其中繼承了佈局的共享自定義元素。我不確定什麼最適合您的項目。 – BBaker

2

這些都是不同的步驟在煎茶觸摸應用程序2創建配置文件:

創建一個包含下面的代碼

你可能更需要一個基礎的應用程序/型材/ Base.js配置文件,如果您在啓動應用程序時爲這兩個配置文件執行相同的代碼。所以這一步是必須的

Ext.define('App.profile.Base', { 
    extend: 'Ext.app.Profile', 

    launch: function() { 

    /* Custom Code */ 

    Ext.fly('booting').destroy(); 
    } 

}); 

創建應用程序/配置文件包含以下代碼

如果你選擇去無底座控制器,那麼一定要,而不是延長Ext.app.ProfileApp.profile.Base/Phone.js:

Ext.define('App.profile.Phone', { 
    extend: 'App.profile.Base', 

    config: { 
    controllers: ['Main'], 
    views: ['Main'] 
    }, 

    isActive: function() { 
    return Ext.os.is.Phone; 
    }, 

    launch: function() { 
    Ext.create('App.view.phone.Main'); 
    this.callParent(); 
    } 
}); 

創建應用程序/簡檔/ Tablet.js包含以下代碼

如果你選擇去無底座控制器,那麼一定要,而不是延長Ext.app.ProfileApp.profile.Base

Ext.define('App.profile.Tablet', { 
    extend: 'App.profile.Base', 

    config: { 
    controllers: ['Main'], 
    views: ['Main'] 
    }, 

    isActive: function() { 
    return Ext.os.is.Tablet || Ext.os.is.Desktop; 
    }, 

    launch: function() { 
    Ext.create('App.view.tablet.Main'); 
    this.callParent(); 
    } 
}); 

創建應用程序/視圖/電話/主。包含下面的代碼

Ext.define('App.view.phone.Main', { 

    extend: 'Ext.Container', 

    config: { 
    fullscreen: true, 
    items: [{ 
     html:'This is the main view for the phone profile' 
    }] 
    } 
}); 

JS創建應用程序/視圖/片/包含以下代碼

Ext.define('App.view.tablet.Main', { 

    extend: 'Ext.Container', 

    config: { 
    fullscreen: true, 
    items: [{ 
     html:'This is the main view for the tablet profile' 
    }] 
    } 
}); 

就是這樣Main.js。你應該都準備好了。

希望這會有所幫助

+0

感謝格式化我的答案..我不知道你可以做到這一點其他人民的帖子 – BBaker

+0

是的,你可以,只要點擊下面的'編輯'鏈接,如果你認爲它的格式不是最好的。由於您尚未擁有2000的聲望,因此您修改的內容將由其他用戶(擁有超過2000的聲望)進行審覈並進行驗證或拒絕。 http://stackoverflow.com/privileges –

+0

我的問題在這裏回聲:http://www.sencha.com/forum/showthread.php?197910-Problem-with-Sencha-Profiles 而在具體的問題,我有,當我加載「面板A」時,它被添加到平板電腦視圖,而不是電話視圖。 – andyjv

相關問題