次の問題があります。いくつかの変数を持つ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がないと主張します。
変数はイベント ハンドラーからアクセスできますが、他の場所では明らかにアクセスできないため、これはスコープの問題のようです。誰もそれを修正する方法を知っていますか? URL はサーバー タグを使用して作成され、それらを JS ファイルに配置することはできません。それらをテキスト文字列としてJSファイルに直接入れるのは好きではありません。可能な解決策はありますか?
アップデート
さらにいくつか試してみましたが、何も機能しません。
私が試してみました:
'beforeload': function (store, options) {
store.proxy.setUrl('/Marketing/ListProposalsSentAndReceived');
}
しかし、それでもうまくいきませんでした。それでも同じ例外が発生しました。なぜそれが失敗したのか、私にはまったくわかりませんが、 「api」の下のExtJsドキュメントからコードを取得しました。
サーバータグを使用して動的に追加することを非常に好みますが、jsファイルにURLをハードコーディングする以外に選択肢はありません。願わくば、いつの日か、コントローラー アクションの場所を変更したときに実行時エラーが発生するのではなく、解決策が見つかることを願っています。