2017-07-06 4 views
0

私の主な問題は、require.jsを使用しているときです。私の機能はもはやグローバルではありません。だから、私はそれを私のphtmlファイルから呼び出すと、見つからない。私のjsファイル内の関数をグローバルに作成する正しい方法は何ですか?私は複数の方法を試した/私がオンラインで見つけた答えは何もうまくいくようです。助言がありますか?ここで Magento 2:jsの呼び出し方法require.jsファイル内のphtファイルの関数

は私のjsファイルである

define([ 
    'jquery' 
], function ($) { 

    return function (config) { 
    console.log(config); 
    } 

    function initMap() { 
    console.log('initMap is being called'); 
    } 
}); 

マイrequirejs-config.jsのファイル:

var config = { 
    map: { 
     '*': { 
      'gslMap': ['Gauge_StoreLocator/js/app'] 
     } 
    } 
}; 

マイPHTMLファイル:コールバック関数 "initMapが" 最後に呼び出されている

<script async defer src="https://maps.googleapis.com/maps/api/js?key=<?php echo $this->getGoogleApi(); ?>&callback=initMap"> 

答えて

0

あなたはinitMap機能がグローバルにする必要がある場合は、あなたが意図的にグローバル空間にそれをリークすることによってそれを行うことができます。

define([ 
    'jquery' 
], function ($) { 

    return function (config) { 
    console.log(config); 
    } 

    function initMap() { 
    console.log('initMap is being called'); 
    } 

    // Deliberately leak initMap into the global space. 
    window.initMap = initMap; 
}); 

ただし、ブラウザで使用された場合RequireJSは常に非同期で動作していること。ですから、あなたのscriptタグをどこかに突き刺して、最高のものを願ったら、問題に遭遇します。最初にinitMapというモジュールをロードするコードによって動的に追加された場合、うまくいくでしょう。

mapは配列をとらないことに注意してください。一方、pathsは配列を値として受け入れますが、ただ1つの要素の配列のポイントが表示されません。 で指定した配列のためにRequireJSが大声で失敗しない理由は、JavaScript ["foo"].toString() === "foo"のそれであり、mapの値を処理するコードに.toString()の暗黙の呼び出しがあり、RequireJSが表示されます。あなたの配列は配列の代わりにそれに含まれる単一の文字列を置いたのと同じようにします。複数の要素からなる配列を試そうとすると、問題が発生します。

関連する問題