Sencha Touch 2.1 Anzeigen von Ref im Controller
Beim Versuch, programmgesteuert push eine Blick in die Haupt-navigation anzeigen auf den viewport, bekomme ich die folgende Fehlermeldung:
Uncaught TypeError: Object [object object] has no method 'getMainPanel", wenn Sie die folgende Zeile in die MainController.js Datei heißt:
var mainnav = this.getMainPanel();
Ich versuche einfach nur, um ein ref-navigation anzeigen von xtype, so dass ich kann eine mainnav.push('viewName'), je nachdem, ob es zurückgegebenen Daten aus einer Daten-Anruf. Die Daten und Daten nennen sind die arbeiten gut, und ich kann Sie manuell fügen Sie die gewünschten sichten auf die main view-port, so dass die navigation Sicht wertlos, das ist nicht meine Absicht.
Habe ich versucht, indem Sie die "Ref" durch xtype, 'MainPanel' und auch durch die Zuordnung und id, id: 'MainPanel' und in den controller versucht:
refs: {
mainPanel: 'MainPanel'
}
und von Id:
refs: {
mainPanel: '#MainPanel'
}
Egal, der Fehler ist der gleiche.
Für den Hinweis, den ich versucht habe zu befolgen, die Situationen beschrieben, in den folgenden Ressourcen:
http://docs.sencha.com/touch/2.1.1/#!/guide/Controller
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 - Nicht in der Lage zu bekommen, ref view vom controller
Sencha Touch 2.0-Controller-refs-Attribut nicht funktioniert?
Sencha Touch 2.0 und navigation.View - MVC
Hier ist mein code:
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');
}
}
});
}
});
Update Main.js und update 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'});
}
}
});
}
});
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den Sie zuweisen möchten eine
itemId
config zu IhremMain
anzeigen. Also:Dann im controller auf den Sie verweisen, Ihre
Main
Blick überref
. Also:Nun sollten Sie in der Lage sein zu tun
var mainnav = this.getMainPanel();
Auch die Art, wie Sie schieben die neuen Ansichten falsch ist. Sie übergeben eine
String
wenn Sie sollten darauf drängen eineObject
. Überprüfen Sie die docs.So, in Ihrem Fall möchten Sie vielleicht, dies zu tun:
und
vorausgesetzt
CharList
undNewCharacter
sind diextypes
von der jeweiligen Ansichten.Edit:
Ok, wenn Sie noch mit dem gleichen Problem, es könnte sein, dass Sie dies tun in der
init
Funktion. Versuchen Sie, Ihre Logik, um dielaunch
- Funktion statt. Es stellt sich heraus, dasinit
- Funktion wird aufgerufen, bevor die Anwendung startet. http://docs.sencha.com/touch/2.1.1/#!/api/Ext.app.Controller-cfg-initUncaught TypeError: Object [object Object]
in Zeilevar mainnav = this.getMainPanel();
views
imExt.application({...})
Eigentlich, wenn Sie anrufen
mainnav = this.getMainPanel();
innerhalb der Funktion init() der MainPanel-Ansicht ist noch nicht erstellt, das ist, warum Sie immer undefined, versuchen Sie es mit einem click-handler, und Sie werden sehen, dass wird funktionieren, weil alle Ansichten bereits erstellt, im moment des Klicks.probieren Sie etwas wie dieses :