首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >slim-lang中的Ruby每个循环

slim-lang中的Ruby每个循环
EN

Stack Overflow用户
提问于 2013-11-10 05:58:52
回答 2查看 9.1K关注 0票数 7

我希望能够通过javascript遍历实例变量,但我不太确定如何使其工作。

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

我尝试过的方法:使用<% @spots.each do |spot| %>,不带引号#{}

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-10 06:23:24

似乎一旦你在ruby slim块中,你就不能再做javascript:循环了。

我能让这个基本上正常工作

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

但这使得每个addMarker调用都有单独的脚本标记,这看起来很愚蠢。

您还可以尝试将数据作为JSON放在页面上,然后在Javascript中执行循环。如下所示:

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

您可能希望确保在运行这段代码时theMap已经可用,但我认为这可能会起作用。您还应该检查每个@spot的JSON格式。根据您设置JSON的方式,每个spot可能如下所示

代码语言:javascript
复制
{'spot': { 'latitude': ###, 'longitude': ### } } 

这意味着你必须在循环中取消对对象的引用。

票数 8
EN

Stack Overflow用户

发布于 2013-11-10 06:21:47

容易修复,但如果斑点太长则效率不高。

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

在js中查看上下文循环,而不是

代码语言:javascript
复制
javascript:
  var spots = #{@spots.to_json};
  $(spots).each(function(index, obj) {
    map.addMarker({
      lat: obj.latitude,
      lng: obj.longitude,
      title: "spot",
    });
  });
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19883592

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档