當試圖以編程方式推圖到視口的主導航視圖中,我得到以下錯誤:煎茶觸摸2.1獲取視圖通過參考
遺漏的類型錯誤:對象的翻譯:有沒有一種方法「 getMainPanel」當MainController.js文件中的以下行稱爲:
var mainnav = this.getMainPanel();
我只是想通過的xtype得到裁判導航視圖,這樣我可以執行mainnav.push(‘的viewName’)取決於是否有數據調用返回的數據。數據和數據調用工作正常,我可以手動將所需的視圖添加到主視圖端口,導致導航視圖毫無價值,這不是我的意圖。
我曾試圖通過的xtype, 'mainPanel中',也通過分配和ID,ID添加 「參考」: 'mainPanel中',並在控制器嘗試:
refs: {
mainPanel: 'MainPanel'
}
和編號:
refs:{ mainPanel:'#MainPanel' }
無論如何,錯誤都是一樣的。
僅供參考我試圖遵循下列資源中描述的情形:
http://docs.sencha.com/touch/2.1.1/#!/guide/controllers
http://docs.sencha.com/touch/2.0.2/#!/api/Ext.ComponentQuery
http://www.sencha.com/forum/showthread.php?179143-View-reference-getter-undefined
Sencha Touch 2- Unable to get ref view from controller
Sencha Touch 2.0 Controller refs attribute not working?
Sencha Touch 2.0 and navigation.View - MVC
這裏是我的代碼:
app.js
Ext.application({
name: 'AddCharSheet',
views: ['Main'],
models: ['CharacterSelectModel'],
stores: ['CharacterSelectStore'],
controllers: ['MainController'],
launch: function(){
Ext.Viewport.add({
xtype: 'MainPanel'
});
}
});
Main.js
Ext.define('AddCharSheet.view.Main', {
extend: 'Ext.navigation.View',
requires: ['AddCharSheet.view.CharacterSelect', 'AddCharSheet.view.AddNewCharacter', 'Ext.Toolbar', 'Ext.Panel'],
xtype: 'MainPanel',
config: {
}
});
MainController.js
Ext.define('AddCharSheet.controller.MainController',{
Extend: 'Ext.app.Controller',
config: {
stores: ['AddCharSheet.store.CharacterSelectStore'],
models: ['AddCharSheet.model.CharacterSelectModel'],
views: ['AddCharSheet.view.AddNewCharacter', 'AddCharSheet.view.CharacterSelect'],
refs: {
mainPanel: 'MainPanel'
},
control: {
},
launch: function() {
}
},
init: function(){
var chs = Ext.getStore('charSelStore');
var mainnav = this.getMainPanel();
chs.load({
callback: function(recs, operation){
if(this.getCount() > 0){
mainnav.push('CharList');
}
else{
mainnav.push('NewCharacter');
}
}
});
}
});
更新Main.js和更新MainController.js
Main.js
Ext.define('AddCharSheet.view.Main', {
extend: 'Ext.navigation.View',
requires: ['AddCharSheet.view.CharacterSelect', 'AddCharSheet.view.AddNewCharacter', 'Ext.Toolbar', 'Ext.Panel'],
xtype: 'MainPanel',
config: {
itemId: 'mainpanel'
}
});
MainController.js
Ext.define('AddCharSheet.controller.MainController',{
Extend: 'Ext.app.Controller',
config: {
stores: ['AddCharSheet.store.CharacterSelectStore'],
models: ['AddCharSheet.model.CharacterSelectModel'],
views: ['AddCharSheet.view.AddNewCharacter', 'AddCharSheet.view.CharacterSelect'],
refs: {
mainPanel: {
autoCreate: true,
selector: '#mainpanel',
xtype: 'MainPanel'
}
},
control: {
},
launch: function() {
}
},
init: function(){
var chs = Ext.getStore('charSelStore');
var mainnav = this.getMainPanel();
chs.load({
callback: function(recs, operation){
if(this.getCount() > 0){
mainnav.push({xtype: 'CharList'});
}
else{
mainnav.push({ xtype: 'NewCharacter'});
}
}
});
}
});
還是一樣在同一地點確切的錯誤,就像當我嘗試指定範圍更廣ID而非條目標識。我注意到需要一個對象而不是字符串。另外,如果我正確理解Ref文檔,那麼您建議的方式應該永遠不會拋出錯誤,因爲autoCreate爲true並且指定了xtype,如果它不能獲取視圖,而不應該創建它的新實例?閱讀下高級裁判[鏈接] http://docs.sencha.com/touch/2.1.1/#!/guide/controllers – SouthPlatte
所以你仍然會得到這個相同的錯誤:'未捕獲TypeError:對象[對象對象]'在線'var mainnav = this.getMainPanel();' – cclerville
是的,同樣的錯誤。我將用新代碼更新原始帖子,以驗證我已正確實施 – SouthPlatte