2013-02-25 54 views
1

今天開始,我對Sencha非常陌生。我有一個基於使用'sencha generate app'命令創建的應用程序的簡單應用程序。Sencha骨架應用程序沒有路由器

所有工作正常,直到我增加了一個控制器,用於登錄進行部署時和運行應用程序,我得到以下錯誤:

Uncaught TypeError: Object #<Object> has no method 'getRouter' Controller.js:476 
Ext.define.applyRoutes Controller.js:476 
setter sencha-touch.js:5441 
Base.implement.initConfig sencha-touch.js:4882 
Ext.define.constructor Controller.js:386 
Class sencha-touch.js:5170 
(anonymous function) 
Ext.ClassManager.instantiate sencha-touch.js:6749 
Ext.ClassManager.instantiateByAlias sencha-touch.js:6661 
Ext.apply.factory sencha-touch.js:9779 
Ext.define.factoryItem Container.js:609 
Ext.define.add Container.js:682 
Base.implement.callOverridden sencha-touch.js:4734 
etc...... 

當我跟蹤這個錯誤似乎在App需要一個路由器對象,但它沒有得到它。我無法找到任何地方如何配置一個路由器(在我看來,應該有一個默認情況下)。

applyRoutes: function(routes) { 
    var app = this instanceof Ext.app.Application ? this : this.getApplication(), 
     router = app.getRouter(), // THIS IS WHERE IT FAILS 

我已指定所述控制器在所述App.js

views : ['Main', 'Home', 'Contact', 'Login', 'CreateAccount'], 
controllers : ['LoginController'], 

這是控制器:

Ext.define("MyApp.controller.LoginController", { 
extend : "Ext.app.Controller", 

xtype : 'logincontroller', 

config : { 
    refs : { 
     loginForm : "#loginFormPanel" 
    }, 
    control : { 
     'button[action=login]' : { 
      tap : "authenticateUser" 
     } 
    }, 
    views : ['Login'] 
}, 

authenticateUser : function(button) { 

    this.getLoginForm().submit({ 
     url : 'php/process_login.php', 
     method : 'POST', 
     success : function(form, result) { debugger; 
      var jsonoutput = Ext.decode(result); 
      // json parsing 
      Ext.MessageBox.alert('Error', "Success"); 

     }, 
     failure : function(form, result) {//This block of code is not executing even after JSON response 
      Ext.MessageBox.alert('Error', "Invalid username/password"); 
     } 
    }); 
} 

});

登錄表單

Ext.define('MyApp.view.Login', { 
extend : 'Ext.form.Panel', 
id : 'loginFormPanel', 
xtype : 'loginform', 

requires : ['Ext.form.FieldSet', 'Ext.field.Password'], 

config : { 
    title : 'Login', 
    iconCls : 'login', 
    items : [{ 
     xtype : 'fieldset', 
     title : 'Logingegevens', 
     items : [{ 
      xtype : 'textfield', 
      name : 'username', 
      label : 'Gebruikersnaam' 
     }, { 
      xtype : 'passwordfield', 
      name : 'password', 
      label : 'Wachtwoord' 
     }] 
    }, { 
     xtype : 'button', 
     text : 'Login', 
     id : 'loginButton', 
     ui : 'action', 
     action : 'login' 
    }] 
} 

});

感謝您的幫助, 科恩

回答

1

你沒有指定在你的控制器的配置的任何路由。看看Sencha的docs路由。

... 
config: { 
    routes: { 
     ... 
    }, 

    refs: { 
     ... 
    } 
}, 
... 
+0

謝謝,我在開始時加入了一些路線,但它似乎也不起作用,現在它工作:) – 2013-02-26 09:40:35