私は今日モジュールパターンを明らかにすることを学んでおり、今のところ問題ありません。しかし、明らかにするモジュールパターン関数が別の明らかにするモジュールパターン内から呼び出されたときに、呼び出し元のパターン関数に値を返すことができるかどうか疑問に思っていますか?
たとえば、いくつかの関数を含むロケーション モジュール パターンがあり、それを別のモジュール パターンで使用したいとします。そのコードは次のとおりです。
位置公開モジュールのパターン
// 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);