Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 自定义计算功能senchatouch_Javascript_Extjs_Model View Controller_Sencha Touch 2_Sencha Touch 2.1 - Fatal编程技术网

Javascript 自定义计算功能senchatouch

Javascript 自定义计算功能senchatouch,javascript,extjs,model-view-controller,sencha-touch-2,sencha-touch-2.1,Javascript,Extjs,Model View Controller,Sencha Touch 2,Sencha Touch 2.1,我在Sencha Touch 2.4中工作,我想在特定的视图卡上执行计算。但是,是否可以在视图外部(可能在模型或控制器中)定义计算函数,以便在加载视图时仅调用该函数 我当前正在Activate的事件中调用myCalc函数,结果当前显示在console的console.log()上 我的第一个问题是,是否可以在视图之外定义我的计算函数(计算中使用了两种方法),以便优化性能,并在视图中使用参数method调用参数method来计算参数method function myCalc(method) {}

我在Sencha Touch 2.4中工作,我想在特定的视图卡上执行计算。但是,是否可以在视图外部(可能在模型或控制器中)定义计算函数,以便在加载视图时仅调用该函数

我当前正在Activate的
事件中调用myCalc函数,结果当前显示在console的
console.log()

我的第一个问题是,是否可以在视图之外定义我的计算函数(计算中使用了两种方法),以便优化性能,并在视图中使用参数method调用参数method来计算参数method

function myCalc(method) {}
我的第二个问题是,如何在视图上显示我的计算结果,我设置了一个名为
myID
的id,如何借助id显示结果

我的代码:

xtype: 'mycard',
config: {
        listeners: {
            activate: 'onActivate'
        },
        id: 'myID',
        styleHtmlContent: true
        ],
    }
 onActivate: function(me, container) {
 var results = new myCalc('METHOD1');
 console.log(results);
function myCalc(method) {...}
}
EDIT1: 我在计算中使用了GPS坐标。我想将它们或结果设置到我的屏幕上。如何设置HTML
或获取
位置更新
之外的坐标

onActivate: function(me, container) {
    var geo = Ext.create('Ext.util.Geolocation', {
     autoUpdate: false,
     listeners: {
      locationupdate: function(geo) {
         var currentLat = geo.getLatitude();
         var currentLng =  geo.getLongitude();
         var PT = new Ext.util.Calc.myCal('METHOD1');
         var c = PT.setC([currentLat, currentLng]);
         //this.setHtml(c); // not working
         console.log(c);
      }
      }
    });
    geo.updateLocation();
}

有几种方法可供选择:

  • 如果卡片后面有一个模型实例、一条记录,那么最简单、最有效、最优雅的方法就是将计算作为一个实例在模型级别实现。记录字段通常很容易在视图中显示
  • 您可以将该函数实现为命名空间的方法,以便可以从任何位置调用它:
    MyApp.myCalc(参数)
    。该卡的视图将侦听激活事件,调用该方法并显示结果
    您可以使用Ext.define在自己的类中定义函数,然后在整个应用程序中使用它,如下所示:

    Ext.define("Calculator", {
       addition: function(num1, num2) {
           return num1 + num2;
       },
       subtract: function(num1, num2) {
           return num1 - num2;
       }
       ...
    });
    
    您可以在它自己的文件中创建它,例如
    App.util.Calculator
    。还可以将其用作mixin(),以便可以将此功能添加到任何其他类中

    要更新卡的结果,请使用以下内容:

    items: [{
        title: 'Home',
        iconCls: 'home',
        html: 'Home Screen',
        listeners: {
            activate: function() {
                var calc = new Calculator();
                this.setHtml('2 + 3 = ' + calc.addition(2,3));
            }
        }
    }]
    
    编辑:这超出了您发布的代码的范围,请尝试以下操作

    onActivate: function(me, container) {
        var that = this;
        var geo = Ext.create('Ext.util.Geolocation', {
         autoUpdate: false,
         listeners: {
          locationupdate: function(geo) {
             var currentLat = geo.getLatitude();
             var currentLng =  geo.getLongitude();
             var PT = new Ext.util.Calc.myCal('METHOD1');
             var c = PT.setC([currentLat, currentLng]);
             that.setHtml(c); // not working
             console.log(c);
          }
          }
        });
        geo.updateLocation();
    }
    

    谢谢我的方法,这个方法和创建自己的插件方法之间有什么性能差异吗?老实说,我不认为它们之间有太大的差异,我只考虑如何使用这个类。计算器在这样的util类中可能是最好的,它可以在整个应用程序中使用。好的,可以对其应用singleton属性,以便只进行一次计算,并且在调用视图时,它显示了以前计算的?是的,您可以这样做,并且可能在类上有一个lastResult属性,可以为您保留该信息
    setHtml
    给出了未定义的引用错误。我如何设置结果?我的代码位于:
    locationupdate:function(geo){}
    如何在
    locationupdate
    setHtml
    之外设置纬度和逻辑度?