0

Я работаю в Sencha Touch 2.4, и я хочу выполнить расчет на конкретной карточке вида. Однако можно ли определить функцию вычисления вне представления (может быть в модели или контроллере), чтобы при загрузке представления она просто вызывала функцию.пользовательские функции калькуляции Sencha Touch

В настоящее время я вызываю функцию myCalc в событии onActivate, и результат отображает console.log() на консоли.

Мой первый вопрос: возможно ли определить мою функцию вычисления (несколько методов, используемых в вычислении) вне представления, чтобы оптимизировать производительность и вызывать в представлении с аргументом метода для вычисления по аргументу метод?

function myCalc(method) {} 

Мой второй вопрос, как вывести свои расчетные результаты на взгляд, я создал идентификатор с именем, как myID как можно отобразить результаты по помощи ид?

Мой код:

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-координаты в мой расчет. Я хочу установить их или результат на свой экран. как я могу 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(); 
} 

ответ

0

Вы можете определить свою функцию в своем собственном классе с использованием Ext.define, а затем использовать его в вашем приложении, как это:

Ext.define("Calculator", { 
    addition: function(num1, num2) { 
     return num1 + num2; 
    }, 
    subtract: function(num1, num2) { 
     return num1 - num2; 
    } 
    ... 
}); 

Вы можете создать это в своем собственном файле, например App.util.Calculator. Вы также можете использовать его как mixin (guide here), чтобы вы могли добавить эту функциональность в любой другой класс.

Для обновления результатов карты, использовать что-то вроде этого:

items: [{ 
    title: 'Home', 
    iconCls: 'home', 
    html: 'Home Screen', 
    listeners: { 
     activate: function() { 
      var calc = new Calculator(); 
      this.setHtml('2 + 3 = ' + calc.addition(2,3)); 
     } 
    } 
}] 

EDIT: Это из области видимости в коде вы в курсе, попробовать что-то вроде этого.

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(); 
} 
+0

Спасибо. есть ли разница в производительности между моим подходом, этим и видом создания собственного плагина? – developer

+1

Я не думаю, что существует такая большая разница между ними, чтобы быть честным, я просто возьму, как класс будет использоваться во внимание. Калькулятор, вероятно, лучше всего подходит для класса util, подобного этому, который может использоваться во всем приложении. – Scriptable

+0

ОК, можно применить свойство singleton к этому так, чтобы вычисление было в течение одного раза, и когда представление будет вызвано, оно показывает предыдущий расчет? – developer

0

Есть несколько вариантов, как это сделать:

  1. Если есть экземпляр модели, записи, где-то за картой, то самый простой, эффективный и элегантный, чтобы осуществить расчет на уровне модели как calculated field. Поле записи обычно очень легко отображать в представлении.
  2. Вы можете реализовать функцию как метод вашего пространства имен, чтобы вы могли его вызвать из любого места: MyApp.myCalc(arguments). View, карта, будет слушать активировать событие, вызвать метод и отобразить результат.