Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/98.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文件中的变量在对象属性中不可访问_Javascript_Scope_Extjs3 - Fatal编程技术网

javascript文件中的变量在对象属性中不可访问

javascript文件中的变量在对象属性中不可访问,javascript,scope,extjs3,Javascript,Scope,Extjs3,我有以下问题。我有一个JS文件,其中有一些变量。我在函数中初始化的对象: var currentYear; var previousYear; var urlQuarterDates; var urlHalfYear; var urlYear; var urlMonth; var urlProposalsSentAndReceived; //= '/Marketing/ListProposalsSentAndReceived'; var urlProposalsResponsibleMonth;

我有以下问题。我有一个JS文件,其中有一些变量。我在函数中初始化的对象:

var currentYear;
var previousYear;
var urlQuarterDates;
var urlHalfYear;
var urlYear;
var urlMonth;
var urlProposalsSentAndReceived; //= '/Marketing/ListProposalsSentAndReceived';
var urlProposalsResponsibleMonth;

function initTabReportProposalsMonth(_currentYear, _previousYear, _urlViewProposal,
_urlQuarterDates, _urlHalfYear, _urlYear, _urlMonth, _urlProposalsSentAndReceived, 
_urlProposalsResponsibleMonth) {
    currentYear = _currentYear;
    previousYear = _previousYear;
    urlQuarterDates = _urlQuarterDates;
    urlHalfYear = _urlHalfYear;
    urlYear = _urlYear;
    urlMonth = _urlMonth;
    urlProposalsSentAndReceived = _urlProposalsSentAndReceived;
    urlProposalsResponsibleMonth = _urlProposalsResponsibleMonth;
}
我在同一个JS文件中定义了一个事件处理程序:

function onPeriodSelect(combo, rec, i) {
    var conn = new Ext.data.Connection();
    var params = { }; 
    switch(rec.get('myId'))
    {
        case _currentQuarter1:
            conn.url = urlQuarterDates;
            params.y = currentYear;
            params.index = 1;
            break;
    }
    reload(); //
}
变量urlquartdates和currentYear易于访问。到目前为止,一切都很好

我还有一个ExtJs网格,其中包含一个声明为内联的数据存储:

var gridSentAndReceived = new Ext.grid.GridPanel({
    title: 'Totaal',
    autoHeight: true,
    autoWidth: true,
    store: new Ext.data.Store({
        id: 'idStoreSentAndReceived',
        proxy: new Ext.data.HttpProxy({ url: urlProposalsSentAndReceived, 
            timeout: 1800000 }),
        reader: new Ext.data.JsonReader(
            {
                root: 'rows'
            },
            [
                { name: 'Status' },
                { name: 'nrOfProposals' },
                { name: 'TotalRevenueHardware' },
                { name: 'TotalRevenueYearly' },
                { name: 'TotalRevenueHours' }
            ]),
        remoteSort: false
    }),
    frame: true,
    iconCls: 'icon-grid',
        columns: [
        ...   
    ],
    viewConfig: {
        forceFit: true
    }
});
函数的作用是:调用gridSentAndReceived存储区的加载。这会产生一个例外:url根本没有定义。如果我在url声明处初始化url(该声明当前被注释为“正常”。当我使用调试器浏览时,它显示urlProposalsSentAndReceived已初始化。尽管如此,它仍声称没有url

这似乎是一个范围问题,因为变量可以从事件处理程序中访问,但显然不能从其他地方访问。有人知道如何修复它吗?URL是使用服务器标记创建的,不能放在JS文件中。我不喜欢将它们作为文本字符串直接放在JS文件中。有可能的解决方案吗

更新

我尝试了更多的东西,但没有任何效果

我试过:

'beforeload': function (store, options) {
    store.proxy.setUrl('/Marketing/ListProposalsSentAndReceived');
}
但即使这样也不起作用。仍然得到了相同的异常。我真的不知道为什么失败,我从“api”下获取了代码


现在我别无选择,只能在我的js文件中硬编码URL,尽管我更喜欢使用servertags并动态添加它们。希望有一天,当我更改控制器操作的位置时,我会找到解决方案,而不是出现运行时错误。

这不是范围问题。在运行代码时未定义Received。如果通过事件处理程序设置该变量,则该值始终在初始化
gridSent和Received
后设置。

使用调试器浏览时,显示UrlProposalsSent和Received已初始化。您所说的初始化是什么意思?在调试模式下,如果将断点放置在
gridSentAndReceived
对象是实例化的,
UrlProposalsSent和Received
的值是多少?因此我需要在某种类型的事件处理程序中初始化变量?这会起作用吗?就像数据存储的onBeforeLoad事件一样?这样我就可以确保在加载时设置它…我不知道,什么是
load()
可以,但除非未调用
initTabReportProposalsMonth()
urlpostent和received
保持未定义状态。initTabReportProposalsMonth()是从JS文件外部调用的。它表明在事件处理程序中,我可以访问初始化变量,但不能从函数访问。这意味着我可以使用onBeforeLoad(store){store.url=urlProposalsSentAndReceived}或从事件处理程序加载({url=urlProposalsSentAndReceived})。我将在星期五尝试此方法,稍后将在此处发布结果。感谢您的帮助!