1

データ属性にマージされることを除いて、link_toと同じように機能するヘルパーが必要です(この場合、ブートストラップを使用してタブを簡単に作成できます:http ://twitter.github.com/bootstrap/javascript.html#tabs )。

だから私はそれをこのように呼ぶことができます:

link_to_tab("Name", @obj)

取得します

<a href='/path' data-toggle='tab'>Name</a>

私はこれがうまくいくように思いついた:

def link_to_tab(*args, &block)
  toggle_hash = {'data-toggle' => 'tab'}
  last_arg = args.pop # if link_to was given a hash of html_options, merge with it
  if last_arg.is_a? Hash
    link_to(*args, last_arg.merge(toggle_hash), &block)
  else
    link_to(*args, last_arg, toggle_hash, &block)
  end
end

link_toを呼び出すすべてのスタイルをサポートするためのよりクリーンで慣用的な方法はありますか?

4

2 に答える 2

2

あまり。あなたはこれを試すことができます...

def link_to_tab(*args, &block)
  toggle_hash = {'data-toggle' => 'tab'}
  if args.last.is_a? Hash
    args.last.merge!(toggle_hash) 
  else
    args << toggle_hash
  end
  link_to(*args, &block)
end

でもそれほど違いはありません...

于 2013-01-03T19:39:21.610 に答える
1

データ属性にマージされることを除いて、link_toと同じように機能するヘルパーが欲しいです。

何かが足りないかもしれませんが、link_toヘルパーにカスタムデータ引数を渡してみませんか?

= link_to "foo tab", {}, "data-toggle" => "tab"

出力:

<a data-toggle="tab" href="/">foo tab</a>

編集

あなたがそれをたくさん使うことを計画しているなら、あなたはすることができます:

def link_to_tab(*args, &block)
  if args.last.is_a? Hash
    link_to *(args.take args.size - 1), args.last.merge("data-tab" => "tab"), &block
  else
    link_to *args, "data-tab" => "tab", &block
  end
end
于 2013-01-04T00:00:17.690 に答える