2015-11-03 7 views
7

मैं इस tutorial और लैरवेल 5 का उपयोग करके एक स्टोर लोकेटर ऐप बनाने की कोशिश कर रहा हूं। इन प्रश्नों में लोग Here और Here अपने लेट/लम्बे निर्देशांक के माध्यम से चलाने के लिए @foreach loops और अन्य ब्लेड टेम्पलेटिंग भाषा का उपयोग कर रहे हैं। वे यह कैसे कर रहे हैं?स्क्रिप्ट फ़ाइल में लैरावेल ब्लेड का उपयोग कैसे करें?

मैं मूल रूप से नहीं जानता कि ब्लेड का उपयोग करके निर्देशांक के माध्यम से लूप कैसे करें जब मेरा नक्शा कोड जेएस फ़ाइल में है? वो कैसे संभव है? क्या मैं कुछ गलत कर रहा हूँ?

function initialize() { 

var map_canvas = document.getElementById('map'); 

// Initialise the map 
var map_options = { 
    center: location, 
    zoom: 10, 
    mapTypeId: google.maps.MapTypeId.ROADMAP 
} 
var map = new google.maps.Map(map_canvas, map_options) 

// Put all locations into array 
var locations = [ 
@foreach ($articles as $article) 
    [ {{ $article->lat }}, {{ $article->lng }} ]  
@endforeach 
]; 

for (i = 0; i < locations.length; i++) { 
    var location = new google.maps.LatLng(locations[i][0], locations[i][1]); 

    var marker = new google.maps.Marker({ 
     position: location, 
     map: map, 
    }); 
} 

// marker.setMap(map); // Probably not necessary since you set the map above 

} 

लेकिन जाहिर है कि @foreach लाइन पर अटक जाती है:

मैं एक जे एस फ़ाइल के साथ अपने नक्शे (maps.js) निम्नलिखित कोड है कि दिखा रहा हूँ।

पीएस: अगर किसी ने लैरवेल 5 के साथ इस ट्यूटोरियल का पालन किया है तो मैं इस भाग पर किसी भी जानकारी के लिए आभारी हूं: PHP के साथ एक्सएमएल आउटपुट करना।

उत्तर

15

बाहरी जावास्क्रिप्ट फ़ाइल के भीतर ब्लेड टेम्पलेटिंग का उपयोग करने का कोई तरीका नहीं है।

लैरवेल केवल डेटा/दृश्य में डेटा पास कर सकता है; जावास्क्रिप्ट फ़ाइलों को बाहरी रूप से लोड किया जाता है और इसलिए ऐप डेटा उन्हें पास नहीं किया जाता है।

आदेश में इस से बचने के लिए, आप अपने ब्लेड टेम्पलेट फ़ाइल के भीतर <script> टैग बनाने की जरूरत:

{{-- Code in your template file, e.g., view.blade.php --}} 

<script type="text/javascript"> 

// Put all locations into array 
var locations = [ 
@foreach ($articles as $article) 
    [ "{{ $article->lat }}", "{{ $article->lng }}" ], 
@endforeach 
]; 

// NOTE: I've added a comma which will be needed to delimit each array within the array. 
//  Quotes will also be needed since lat and long are not integers. 

</script> 

इस स्निपेट से पहले अपने maps.js फ़ाइल सहित के लिए कोड आता होना सुनिश्चित करें। यदि आपने अपने <head> टैग के भीतर maps.js फ़ाइल को शामिल किया है, तो आपको उस समावेशन स्निपेट को पृष्ठ के नीचे तक ले जाने की आवश्यकता होगी।

हालांकि यह एक प्राथमिक प्राथमिक समाधान है। शुरुआतीकरण पर maps.js फ़ाइल के भीतर से डेटा पुनर्प्राप्त करने के लिए AJAX का उपयोग करने का एक बेहतर तरीका होगा।

यह निश्चित रूप से आपको एक नई नियंत्रक विधि और संबंधित मार्ग बनाने की आवश्यकता होगी जो अनुरोध को संभाल सकता है और आवश्यक डेटा वापस कर सकता है।

+0

यह मेरे लिए सही काम करता है! लेकिन, क्या कई चर के साथ ऐसा करने का कोई तरीका है? उदाहरण के लिए, अगर मैं प्रत्येक मार्कर में सामग्री रखना चाहता था। ऐसा कैसे किया जा सकता था? – AlmostPitt

+0

आपका क्या मतलब है? आपके नियंत्रक में आप बस अधिक चर भेज सकते हैं .. जैसे 'देखें (' myView ', [' variable1 '=> $ variable1,' variable2 '=> $ variable2, आदि ...]); – heisian

+0

हाँ, मैं परिवर्तनीय स्थानों के भीतर अलग-अलग सरणी डालना चाहता हूं। उदाहरण के लिए, प्रत्येक स्थान के लिए, मैं स्थान और कुछ अन्य जानकारी के शीर्षक को इंजेक्ट करना भी चाहूंगा। इस पोस्ट को देखने के बाद, मैंने इस संबंध में एक और सवाल पोस्ट किया। शायद यह मेरे प्रश्न को स्पष्ट करने में मदद करेगा: https://stackoverflow.com/questions/45924237/laravel-5-4-blade-javascript-google-maps-insert-foreach-with-multiple-variabl – AlmostPitt

1

आप Eloquent वस्तु से एक JavaScript वस्तु बना सकते हैं, उदाहरण के लिए निम्नलिखित कोड पर एक नज़र डालें:

// index.blade.php 
<script>var userObj = {{ $authUser or 'undefined' }}</script> 

यह एक blade दृश्य है और मैं सिर्फ view लोड हो रहा हूँ और करने के लिए collection गुजर कुछ का उपयोग कर दृश्य इस तरह (का उपयोग करते हुए एक view composer):

View::composer('layouts.master', function($view) { 
    $user = null; 
    if(Auth::check()) { 
     $user = Auth::user(); 
    } 
    $view->with('authUser', $user); 
}); 

तो, मेरी view में मैं $authUser है तो मैं ca n की तरह आसानी से JS वस्तु को बदल:

<script>var userObj = {{ $authUser or 'undefined' }}</script> 

तो अब, मैं एक JS वस्तु जो userObj चर (जावास्क्रिप्ट) में है के रूप में उपयोग कर सकते हैं। this article of mine देखें जो मैंने लगभग एक साल पहले Laravel-4 के लिए लिखा है।

1

आपके द्वारा प्रदान किए गए नमूने में, वे ब्लेड का उपयोग कर रहे हैं क्योंकि वे एक ब्लेड फ़ाइल में हैं, और सभी जावास्क्रिप्ट टैग के बीच है। यह एक .js फ़ाइल प्रकार नहीं है, इसलिए आप इस तरह ब्लेड भाषा सुविधाओं का उपयोग कर सकते हैं।

संबंधित मुद्दे