Ext.device.notification.show在Phonegap中创建错误 - Sencha Touch 2

时间:2014-03-14 15:38:42

标签: android extjs cordova sencha-touch sencha-touch-2

我有一个Sencha Touch 2项目,一切都在Web浏览器中运行良好。控制台没有错误,一切看起来都不错。然而,一旦我用Phonegap打包并在移动设备上运行它,事情就不会有效了。

我在我的应用程序的两个地方使用ext.device.notification.show。起初,我正在做requires: 'Ext.device.*',虽然它在网络上运行,但应用程序无法在移动设备上运行,eclipse会给我错误消息Uncaught TypeError: Cannot read property 'name' of undefined。我切换到requires: Ext.device.Notification(确切的拼写和大小写),现在应用程序运行但是当我单击应该创建消息框的按钮时,我收到错误Uncaught TypeError: Cannot call method 'confirm' of undefined。问题是我没有叫做确认的方法。在一种情况下,我有一个名为confirmItem的方法,但对于应该调用消息框的第二个按钮,我没有远程接近“确认”的方法。

我将发布下面的一个控制器(这个控制器有confirmItem方法):

Ext.define('MyApp.controller.MainController',
{

extend: 'Ext.app.Controller',
requires: ['Ext.device.Notification'],

config:
{
    refs:
    {
        mainView: 'mainview',

        btnConfirm: 'mainview button[action=confirmItem]',

    },
    control:
    {

        'btnConfirm':
        {
            tap: 'confirmItem'
        },
        mainView:
        {
            onSignOffCommand: 'onSignOffCommand'
        }
    }
},


// Transitions
getSlideLeftTransition: function ()
{
    return {
        type: 'slide',
        direction: 'left'
    };
},

getSlideRightTransition: function ()
{
    return {
        type: 'slide',
        direction: 'right'
    };
},

onSignOffCommand: function ()
{

    var me = this;

    console.log('Signed out.');
    loginView = this.getLoginView();
    //MainView.setMasked(false);

    Ext.Viewport.animateActiveItem(loginView, this.getSlideRightTransition());

},

confirmItem: function ()
{
    Ext.device.Notification.show(
    {
        title: 'Confirm',
        message: 'Would you like to Confirm?',
        buttons: ['No', 'Yes'],
        callback: function (button)
        {
            if (button == "Yes")
            {
                MyApp.app.getController('MainController')
                    .confirmPickup();
            }
            else
            {
                console.log('Nope.');
            }
        }

    });
},

confirmPickup: function ()
{

    var me = this;

    var loginStore = Ext.getStore('LoginStore');
    mainView = this.getMainView();
    mainView.setMasked(
    {
        xtype: 'loadmask',
        message: ' '
    });

    if (null != loginStore.getAt(0))
    {
        var user_id = loginStore.getAt(0).get('id');
        var name = loginStore.getAt(0).get('name');
        var winner = loginStore.getAt(0).get('winner');
    }

    if (winner === 1)
    {
        console.log('success');



    }
    else
    {
        console.log('fail');
    }


}


});

我只假设这是一个问题,因为每当我按下应调用confirmItem的按钮时,我都会收到错误消息。我使用Ext.device.Notification correctly,还是我错过了使其在Phonegap中运行所需的东西?

1 个答案:

答案 0 :(得分:1)

我找到了解决方案!在使用requires: Ext.device.Notification方面,从Sencha Touch的角度来看,一切都很好,但在Phonegap方面缺少一些东西。具体来说,我需要安装适当的插件。

打开终端并输入:Phonegap local plugin list以查看当前安装的插件。我没有。我继续安装:

org.apache.cordova.device
org.apache.cordova.dialogs
org.apache.cordova.vibration 

使用以下参考:http://docs.phonegap.com/en/3.0.0/cordova_device_device.md.html并从左侧菜单中选择选项。