ext js - 使用传递的参数创建自定义函数

时间:2016-04-12 15:19:30

标签: javascript extjs mvvm

只是警告,这是我的第一个ExtJS项目。 我已成功从网络服务器加载了两个商店。

  1. 包含职位的商店
  2. 包含marketData的商店
  3. 我已经创建了第三家商店来保存我的所有结果。 现在我想查看每个位置,找到相关的市场数据记录,并进行简单的计算。

    我在单击按钮时成功完成了所有操作,但我想将实际计算功能分开...传递参数。

    现在只是为了让概念正常工作,我创建了一个名为' sayHello'的函数,但是我收到一条错误说明...... ReferenceError:sayHello未定义。

    有人能指出我创建这个自定义函数的错误吗?

    谢谢!

    我的控制员......

    Ext.define('ExtApplication1.view.clientdetails.clientdetailsController', {
    extend: 'Ext.app.ViewController',
    alias: 'controller.clientdetails-clientdetails',
    
    onClickCalculate: function () {
        console.log('calculation button was hit');
    
        var targetGrid = Ext.getCmp('positionsGridID');
        var positionsStore = targetGrid.store;
    
        var marketDataGrid = Ext.getCmp('marketsGridID');
        var marketDataStore = marketDataGrid.store;
    
        var calculatedPositionsDataGrid = Ext.getCmp('calculatedPositionsGridID');
        var calculatedPositionsDataStore = calculatedPositionsDataGrid.store;
        console.log(calculatedPositionsDataStore);
    
        positionsStore.each(function (record) {
    
            console.log('the details for the whole position');
            console.log(record);
    
            var bbSymbol = record.get('BBSymbol');
    
            var singleRecord;
            marketDataStore.each(function (record) {
                var cycleBBSymbol = record.get('BBSymbol');
                if (cycleBBSymbol === bbSymbol){
                    singleRecord = record;
                    return false;
                }
            });
    
            console.log('position I am evaluateing is ' + bbSymbol);
            console.log('market data found for  ' + singleRecord.get('BBSymbol'));
            console.log(singleRecord);
    
            //debugger;
            var lastPrice = singleRecord.get('Last_Price');
            var settle = singleRecord.get('Px_Settle');
            var qty = record.get('Quantity');
            var marketName = record.get('Description');
            var pnl = (lastPrice - settle) * qty;
            console.log(pnl);
    
            calculatedPositionsDataStore.add({
                BBSymbol: bbSymbol,
                Description: marketName,
                Quantity: qty,
                CalcPLSett: pnl
            });
    
            sayHello(singleRecord);
    
        }, this);
    
    
    
    },
    
    sayHello: function (singleRecord) {
        alert('hello');
        alert(singleRecord);
    }
    

    });

1 个答案:

答案 0 :(得分:1)

您收到此错误是因为您超出了ViewController的范围。

positionsStore.each(function (record) { ...}

您在商店范围内,但sayHello函数位于ViewController范围内。

将ViewController的范围分配给变量,应解决您的问题:

onClickCalculate: function () {
    console.log('calculation button was hit');

    var me = this; //NEW LINE

    var targetGrid = Ext.getCmp('positionsGridID');
    var positionsStore = targetGrid.store;

然后在positionsStore.each函数中使用它:

me.sayHello(singleRecord)