我有以下问题。我有一个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存储的加载。这会产生一个异常:根本没有定义url。如果我在其声明中初始化url(当前已注释掉'它工作正常。当我使用调试器浏览时,它显示urlProposalsSentAndReceived 已初始化。但是,它声称没有URL。< / p>
这似乎是一个范围问题,因为变量可以从事件处理程序访问,但显然不是其他地方。有谁知道如何解决它? URL是使用服务器标签创建的,不能放在JS文件中。我不喜欢将它们作为文本字符串直接放在JS文件中。有可能的解决方案吗?
更新
我尝试了一些其他的东西,但没有任何作用。
我试过了:
'beforeload': function (store, options) {
store.proxy.setUrl('/Marketing/ListProposalsSentAndReceived');
}
但即使这样也行不通。仍然有同样的例外。我真的不知道为什么失败了,我从{api'下的ExtJs Documentation获取了代码。
现在我别无选择,只能硬编码我的js文件中的url,尽管我更喜欢使用servertags并动态添加它们。希望有一天,当我改变控制器动作的位置时,我会找到一个解决方案而不是获得运行时错误。
答案 0 :(得分:0)
这不是范围问题。在您运行代码时urlProposalsSentAndReceived
未定义。如果通过事件处理程序设置该变量,则始终在gridSentAndReceived
初始化后设置该值。