プログラムでビューをビューポートのメイン ナビゲーション ビューにプッシュしようとすると、次のエラーが発生します。
キャッチされていない TypeError: MainController.js ファイルの次の行が呼び出されると、オブジェクト [オブジェクト オブジェクト] にメソッド 'getMainPanel' がありません。
var mainnav = this.getMainPanel();
データ呼び出しから返されたデータがあるかどうかに応じて mainnav.push('viewName') を実行できるように、xtype でナビゲーション ビューへの参照を取得しようとしています。データとデータ呼び出しは正常に機能しており、必要なビューをメイン ビュー ポートに手動で追加して、ナビゲーション ビューを無価値にすることができますが、これは私の意図ではありません。
xtype、「MainPanel」、およびid、id:「MainPanel」を割り当てて、コントローラーで「Ref」を追加しようとしました:
refs: {
mainPanel: 'MainPanel'
}
ID別:
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 - コントローラーから参照ビューを取得できません
Sencha Touch 2.0 Controller refs 属性が機能しない?
Sencha Touch 2.0 と 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'});
}
}
});
}
});