2013-11-09 24 views
6

Tôi muốn có thể lặp qua một cá thể var thông qua một javascript nhưng tôi không hoàn toàn chắc chắn làm thế nào để làm cho nó hoạt động.Ruby Mỗi vòng lặp trong slim-lang

javascript: 
    [email protected] do |spot| 
     map.addMarker({ 
     lat: "#{spot.latitude}", 
     lng: "#{spot.longitude}", 
     title: "spot", 
     }); 
    }); 

gì tôi đã cố gắng: Sử dụng <% @ spots.each làm | chỗ | %> và không có dấu ngoặc kép cho # {}

+0

Nó có hoạt động không? –

+1

Có vẻ tốt với tôi. Lỗi hoặc vấn đề là gì? –

+0

biến cục bộ không xác định hoặc phương pháp 'tại chỗ ' – trigun0x2

Trả lời

8

Dường như khi bạn đang ở trong khối mỏng javascript:, bạn có thể không còn làm vòng ruby.

tôi đã có thể có được điều này để làm việc chủ yếu

- @spots.each do |spot| 
    javascript: 
    map.addMarker({ 
     lat: #{spot.latitude}, 
     lng: #{spot.longitude}, 
     title: "spot" 
    }); 

nhưng mà làm cho thẻ script riêng biệt cho mỗi addMarker cuộc gọi mà có vẻ khá ngớ ngẩn.

Bạn cũng có thể thử đặt dữ liệu trên trang dưới dạng JSON và sau đó thực hiện vòng lặp trong Javascript. Một cái gì đó như thế này:

javascript: 
    var spots = #{raw @spots.to_json}; 
    var ii = 0; 
    var nspots = spots.length; 
    for(;ii<nspots;++ii) { 
    theMap.addMarker(spots[ii]); 
    } 

Bạn muốn chắc chắn rằng theMap có sẵn vào thời gian cụ này chạy, nhưng tôi nghĩ rằng điều này có thể làm các trick. Bạn cũng nên kiểm tra định dạng JSON của mỗi @spot. Tùy thuộc vào cách bạn đã thiết lập JSON, mỗi vị trí có thể trông giống như

{'spot': { 'latitude': ###, 'longitude': ### } } 

có nghĩa là bạn sẽ phải dereference các đối tượng trong các vòng lặp.

+0

Làm vòng javascript hoạt động hoàn hảo! Tôi cảm thấy như nó không phải là rất thanh lịch kết hợp các ngôn ngữ đó nhiều. Cảm ơn! – trigun0x2

+0

Tôi rất vui khi thấy @xmpolaris đã đưa ra một câu trả lời giống nhau - nó đã xác nhận tư duy của tôi. Vui mừng được giúp đỡ. –

2

sửa lỗi dễ dàng nhưng không hiệu quả nếu các vị trí quá dài.

[email protected] do |spot| 
    javascript: 
    map.addMarker({ 
     lat: "#{spot.latitude}", 
     lng: "#{spot.longitude}", 
     title: "spot", 
    }); 

2. vòng lặp trong js thay vì xem bối cảnh

javascript: 
    var spots = #{@spots.to_json}; 
    $(spots).each(function(index, obj) { 
    map.addMarker({ 
     lat: obj.latitude, 
     lng: obj.longitude, 
     title: "spot", 
    }); 
    }); 
Các vấn đề liên quan