仅显示Squib中某些输入值的图标

时间:2016-03-30 22:52:00

标签: ruby svg squib

我的纸牌游戏(使用Squib构建)基于CSV文件。在这个文件中,我有一个名为main的列。

以下是该列的内容......如您所见,很多nil

print data['main']
> [3, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 0, 0, nil, nil, 0, nil, nil, nil, 0, nil, nil, 0, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, 1, nil, nil, nil, nil, nil, -1, nil, nil, nil, nil, 0, 0, 0, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil]

所需行为

对于每张卡片(行):

  • 如果此列中有值,我想显示值,SVG作为背景
  • 如果没有值(nil),我想跳过文本和svg alltogether

我尝试了什么

1 - 我尝试了以下操作,但data['sprint']array而不是value,因此==不起作用:

data = Squib.csv file: 'data.csv'
[...]
if data['Sprint'] != nil
    text str: data['Sprint3'], layout: 'sprint3'
    svg layout: 'block', file: 'svg\left_block.svg'     
end

2 - 所以我尝试使用each方法迭代数组,但这当然会导致在每张卡上显示数组的每个元素:

data['Main'].each do |n|
    if n != nil
        text str: n, layout: 'main'
        svg layout: 'block', file: 'svg\up_block.svg'   
    end
end

我的Ruby知识就在这里。我不知道仅当main列中的值不是nil时才显示一个元素。任何的想法?谢谢!

1 个答案:

答案 0 :(得分:2)

Squib的svg以你想要的方式工作 - 如果它为文件获取nil它将不会做任何事情。所以在您的布局文件中只需输入:

block:
  file: 'svg\up_block.svg'

然后svg调用没有那个“文件”选项(无论如何都为所有卡设置它)

当布局为nil时,它将默认为svg方法的“文件”,即nil,它什么都不做 - 这就是你想要的。那么你的数据字段可能是['block',nil,nil,nil],只会显示在第一张卡片上。

查看我就该主题撰写的一些新文章: http://squib.readthedocs.org/en/latest/arrays.html http://squib.readthedocs.org/en/latest/guides/getting-started/part_2_iconography.html

(当然正在进行中)

此外,这些也很有帮助:https://github.com/andymeneely/squib/blob/master/samples/ranges.rb

if语句让我想起nanDeck会怎么做 - 与Squib的工作方式不同。你可以用“每个”或“选择”来做,但这比它需要的更复杂。

(完全披露:我是Squib的开发者)