1

私は今日モジュールパターンを明らかにすることを学んでおり、今のところ問題ありません。しかし、明らかにするモジュールパターン関数が別の明らかにするモジュールパターン内から呼び出されたときに、呼び出し元のパターン関数に値を返すことができるかどうか疑問に思っていますか?

たとえば、いくつかの関数を含むロケーション モジュール パターンがあり、それを別のモジュール パターンで使用したいとします。そのコードは次のとおりです。

位置公開モジュールのパターン

// Revealing Modular pattern, containing functions relevant to location functionality    
var Location = (function(window, undefined){

    // Gets co-ordinates of users current position (TRUE: Run geoLocate function, FALSE: Run geoError function)
    function getCoords(){            
        navigator.geolocation.getCurrentPosition(getLocation, provideError);
    }

    // Get users current location
    function getLocation(position){

        var lat = position.coords.latitude;
        var lng = position.coords.longitude;

        // Convert seperate variables into one string type variable (Google geocode expects string format)
        var myLocation = String(lat+","+lng);

        console.log(myLocation);

    }

    // Error handler for geolocation
    function provideError(error){            
        console.log(error);
    }

    // Explicitly return public methods when this object is instantiated
    return{            
        getUserLocation : getCoords
    };

})(window);

私の他の公開モジュール パターン (以下) 内で、getUserLocation 関数 (別名 getCoords) を呼び出しており、現在、ユーザーの場所を細かく記録しています (myLocation)。

// Revealing Modular pattern, containing functions relevant to park functionality    
var Park = (function(window, undefined){

    // Determine if user entered postcode or selected 'use my location'
    function handleUserData(data){

        if(data === "postcode"){
            var location = document.getElementById("postcode").value;
        }
        else{
            var location = Location.getUserLocation();
        }

    }

    // Explicitly return public methods when this object is instantiated
    return{            
        handleMe : handleUserData
    };

})(window); 

ただし、console.log(myLocation) を変更して myLocation を返し、コンソール ログの場所 (関数 handleUserData 内) を返すと、undefined になります。

私の理論では、ユーザーの場所を取得し、パーク公開モジュールのパターン関数内で使用したいと考えています。

だから私の質問は、ある明らかにするモジュールパターンから別のパターンに値を返すことは可能ですか? そうでない場合、質問に役立つ他の方法を調査する必要がありますか?

編集

コメントのヘルプから、次を使用してこの問題を修正できました。

位置

// Revealing Modular pattern, containing functions relevant to location functionality    
var Location = (function(window, undefined){

    // Gets co-ordinates of users current position (TRUE: Run geoLocate function, FALSE: Run geoError function)
    function getCoords(callback){

        navigator.geolocation.getCurrentPosition(

            function(position){

                var lat = position.coords.latitude;
                var lng = position.coords.longitude;

                // Convert seperate variables into one string type variable (Google geocode expects string format)
                var myLocation = String(lat+","+lng);

                callback(myLocation);

            }

        )

    }

    // Explicitly return public methods when this object is instantiated
    return{            
        getUserLocation : getCoords
    };

})(window);

公園

// Revealing Modular pattern, containing functions relevant to park functionality    
var Park = (function(window, undefined){

    // Determine if user entered postcode or selected 'use my location'
    function handleUserData(data){

        var location;

        if(data === "postcode"){
            location = document.getElementById("postcode").value;
        }
        else{
            Location.getUserLocation(function(userLocation){
                location = userLocation;
                console.log(location);
            });
        }

    }

    // Explicitly return public methods when this object is instantiated
    return{            
        handleMe : handleUserData
    };

})(window);
4

0 に答える 0