我正在尝试创建一个Rails帮助程序,它使用一个块并循环生成:
<span data-param1="param1" data-param2="param2">
<span data-options="test">
<span data-options="test">
</span>
正在使用的助手的一个例子:
<%= main(param1, param2) do %>
<%= sub('param', :options => 'test') %>
<%= sub('param', 'test') %>
<% end %>
然后是助手本身:
module MyHelper
def main(param1, param2, &block)
raise ArgumentError.new('Missing block!') unless block_given?
content_tag :span, :data => { :param1 => param1, :picture => '' } do
markup = content_tag(:span, '', :data => { :param2 => param2 }).to_s
#loop through blocks of subs
&block.each do |item|
sub = sub(item.param, item.options)
data = { :param => param }
data[:options] = sub.options unless sub.options.blank?
markup << content_tag(:span, '', :data => data).to_s
end
markup
end
private
def sub(param, options = {})
options = extract_options!(options)
end
# returns a string
def extract_options!(options)
when String
options
when Hash
#removed for this question
else
raise ArgumentError.new('Only Hash && String allowed!')
end
end
注意:我已删除了extract_options中的Hash
处理,以使问题代码保持简短。
然而,它不喜欢&block
循环并给出此错误:
syntax error, unexpected &, expecting keyword_end
&block.each do |item|
^
答案 0 :(得分:1)
首先,block基本上是一个each
实例,main
不是任何意味着实现def main(param1, param2, *subs)
...
subs.each ...
end
<%= main(param1, param2, sub('param', :options => 'test'), sub('param', 'test')) %>
,因此在其上调用block
将不会成功情况下。
我想知道,将数组传递给def main(param1, param2, &block)
...
yield.each ...
end
<%= main param1, param2 do %>
<%= [sub('param', :options => 'test'), sub('param', 'test')] %>
<% end %>
有什么问题?你想要实现什么目标?
有效的代码示例:
List
您是否仍想使用WeatherChart
(为什么?):
public void refreshWeatherCharts() {
WeatherChartFetchData callbackservice = new WeatherChartFetchData(this) {
@Override
public void receiveData(boolean success) {
if (success) {
WeatherChartListBuilder.loadData();
RecyclerView.Adapter adapter = ((RecyclerView) recyclerView).getAdapter();
((SimpleItemRecyclerViewAdapter) adapter).updateData(WeatherChartListBuilder.ITEMS);
}
}
};
callbackservice.execute(null, null, null);
}