0

我有以下问题。我有一个 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(); //
}

变量 urlQuarterDates 和 currentYear 很容易访问。到目前为止,一切都很好...

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

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
    }
});

reload() 函数调用gridSentAndReceived 的store 的加载。这会产生一个异常:根本没有定义 url。如果我在其声明处初始化 url(当前已被注释掉,它工作正常。当我使用调试器浏览时,它显示 urlProposalsSentAndReceived初始化。但它声称没有 URL。

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

更新

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

我努力了:

'beforeload': function (store, options) {
    store.proxy.setUrl('/Marketing/ListProposalsSentAndReceived');
}

但即使这样也没有用。仍然有同样的例外。我真的不知道为什么会失败,我从'api'下的ExtJs 文档中获取了代码。

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

4

1 回答 1

0

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

于 2013-01-16T13:03:26.120 回答