自定义计算函数 Sencha Touch
custom calculation function Sencha Touch
我正在使用 Sencha Touch 2.4,我想对特定的视图卡执行计算。但是,是否可以在视图外(可能在模型或控制器中)定义计算函数,以便在加载视图时调用该函数。
我目前正在 onActivate
事件中调用 myCalc 函数,结果目前由 console.log()
在控制台上显示。
我的第一个问题是,是否可以在视图外定义我的计算函数(计算中使用了几种方法),以便优化性能并在视图中调用方法参数来计算参数方法?
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) {...}
}
编辑 1:
我在计算中使用 GPS 坐标。我想将它们或结果设置到我的屏幕上。我如何 setHtml
或获取 locationupdate
之外的坐标?
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();
}
有几种方法可以选择:
- 如果卡片后面某处有模型实例、记录,那么最简单、最有效和优雅的方法是在模型级别将计算实现为 calculated field。记录字段通常很容易在视图中显示。
- 您可以将该函数实现为命名空间的方法,以便您可以从任何地方调用它:
MyApp.myCalc(arguments)
。视图,卡片,将监听激活事件,调用方法并显示结果。
您可以使用 Ext.define 在它自己的 class 中定义您的函数,然后像这样在整个应用程序中使用它:
Ext.define("Calculator", {
addition: function(num1, num2) {
return num1 + num2;
},
subtract: function(num1, num2) {
return num1 - num2;
}
...
});
您可以在自己的文件中创建它,例如 App.util.Calculator
。您也可以将它用作混音 (guide here),以便您可以将此功能添加到任何其他 class.
要更新卡片的结果,请使用如下内容:
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();
}
我正在使用 Sencha Touch 2.4,我想对特定的视图卡执行计算。但是,是否可以在视图外(可能在模型或控制器中)定义计算函数,以便在加载视图时调用该函数。
我目前正在 onActivate
事件中调用 myCalc 函数,结果目前由 console.log()
在控制台上显示。
我的第一个问题是,是否可以在视图外定义我的计算函数(计算中使用了几种方法),以便优化性能并在视图中调用方法参数来计算参数方法?
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) {...}
}
编辑 1:
我在计算中使用 GPS 坐标。我想将它们或结果设置到我的屏幕上。我如何 setHtml
或获取 locationupdate
之外的坐标?
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();
}
有几种方法可以选择:
- 如果卡片后面某处有模型实例、记录,那么最简单、最有效和优雅的方法是在模型级别将计算实现为 calculated field。记录字段通常很容易在视图中显示。
- 您可以将该函数实现为命名空间的方法,以便您可以从任何地方调用它:
MyApp.myCalc(arguments)
。视图,卡片,将监听激活事件,调用方法并显示结果。
您可以使用 Ext.define 在它自己的 class 中定义您的函数,然后像这样在整个应用程序中使用它:
Ext.define("Calculator", {
addition: function(num1, num2) {
return num1 + num2;
},
subtract: function(num1, num2) {
return num1 - num2;
}
...
});
您可以在自己的文件中创建它,例如 App.util.Calculator
。您也可以将它用作混音 (guide here),以便您可以将此功能添加到任何其他 class.
要更新卡片的结果,请使用如下内容:
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();
}