私は使用してrequireJS
おり、条件に応じて要求されるファイルの数を変える必要がありますa == true
。
現在、私はこれを行っていますが、機能しません:
// ok
var baseRequestWidgets = $('html').attr('init') != true
? [ "text!../tmp/page/tmp_page_header_generic.html"
,"text!../tmp/page/tmp_page_header_specific.html"
,"text!../tmp/widgets/tmp_widget_header.html"
,"text!../tmp/widgets/tmp_widget_navbar.html"
,"text!../tmp/page/tmp_page_footer.html"
]
: [ "text!../tmp/widgets/tmp_widget_header.html"
,"text!../tmp/widgets/tmp_widget_navbar.html"
]
// not ok
, baseRequestObjects = $('html').attr('init') != true
? page_header_generic, page_header_specfic, page_widget_header, page_widget_navbar, page_footer
: page_widget_header, page_widget_navbar
require( baseRequestWidgets, function( baseRequestObjects
/*
page_header_generic
, page_header_specfic
, page_widget_header
, page_widget_navbar
, page_footer
*/
){ ... }
問題は、を使用してオブジェクトを関数に渡すことができないことbaseRequestObjects
です。ファイルは正しく要求されますが、baseRequestObjects
は機能しません。
質問:
私が間違っていることについて何か考えはありますか?ありがとう!
編集:
私が得ているエラーはですpage_header_generic is not defined
、それで私はpage_header_genericの私の宣言が要求されている基礎となるファイルの前に行われると思います???
編集:
より近い... RequireJSはbaseRequestObjects
、最初に要求されたファイルを格納するために使用しますが、実際には、要求されたファイルの可変数のプレースホルダーです。
したがって、質問は次のようになり ます。x個のオブジェクト名を含むプラクホルダーが唯一のプレースホルダー名自体と誤解されている場合に、動的な数のオブジェクト名をrequireJSに渡す方法は?
編集:
これはうまくいきます、私は何も渡していないので、私がそれを好きかどうかはわかりません...
var baseRequestWidgets = function(trigger){
var passBack;
if ( trigger == "true" ){
passBack = [ "text!../tmp/widgets/tmp_widget_header.html"
,"text!../tmp/widgets/tmp_widget_navbar.html"
];
} else {
passBack = [ "text!../tmp/widgets/tmp_widget_header.html"
,"text!../tmp/widgets/tmp_widget_navbar.html"
,"text!../tmp/page/tmp_page_header_generic.html"
,"text!../tmp/page/tmp_page_header_specific.html"
,"text!../tmp/page/tmp_page_footer.html"
];
}
return passBack;
}
, getBaseRequestObjects = function( temps) {
var objArr = [];
for ( var i = 0; i < temps.length; i++){
var thisString = temps[i],
addToArray = temps[i].match(/tmp_(.*?)\.html/);
objArr.push( addToArray[1] )
}
return objArr;
}
, baseRequestObjects
両方の変数が動的である必要があるため、これを関数に入れる必要がありました。
次に、requireを次のように呼び出します。
// inside my event call
var ...
widgetsForThisRequest = baseRequestWidgets(trigger),
baseRequestObjects = getBaseRequestObjects( widgetsForThisRequest );
require( widgetsForThisRequest,
function( /* dynamic */ ) {
// this will be dnyamic strings
console.log( widgetsForThisRequest );
// this will be dynamic objects
console.log( baseRequestObjects );
// loop using arguments - not sure if I like this
for ( i = 0; i < baseRequestObjects.length; i++){
widget = arguments[i];
tempName = baseRequestObjects[i];
...
したがって、オブジェクトを渡さず、ループ内でを使用してウィジェットを手動で設定する必要がありますarguments
。動作しているように見えますが、これが正しい方法かどうかはわかりません。とにかく、2つまたは5つ以上の文字列があるので、それぞれの文字列を運ぶ2つまたは5つ以上のオブジェクトが必要になります。今のところ私は大丈夫ですが、誰かがより良いアプローチを知っているなら、共有してくれてありがとう!