0

HTML のいくつかのブロックを条件付きでレンダリングしたい非常に単純なバックボーン ビューがあります。条件付きでレンダリングされた HTML に続いて整数もレンダリングされる動作が見られます。私が知る限り、endステートメントを使用して条件付きブロックを終了すると発生するようです。

これは、私にとってエラーを示しているコードです。

<% if true: %>Hello World!<% end %>

Hello World!これが含まれている要素にレンダリングされることを期待しています。ただし、実際にはレンダリングしていますHello World!2

同じテンプレートにいくつかのブロックを追加すると:

<% if true: %>Foo, <% end %>
<% if true: %>Bar, <% end %>
<% if true: %>Baz<% end %>

Foo, Bar, Bazこれが含まれている要素にレンダリングされることを期待しています。ただし、実際にはレンダリングしていますFoo, 2 Bar, 5 Baz8。それらのやや大きなセットを実行した後、出力される整数は毎回3ずつ増加するようです。宝石のREADMEを読んでも、私が間違っていることは何もわかりません。

どんな助けでも大歓迎です!

4

2 に答える 2

0

私も同じ問題を抱えてる。もう解決しましたか?

コンパイルされたJSの呼び出しでifステートメントがラップされていることが原因だと思います。__obj.push()たとえば、私のスクリプトには、コードの一部があります

<%- if !@blok: %>
  <%- to_html(@create_link('c', @session['course'])) %>
<%- end %>

にコンパイルされます

[1] __out.push(!this.blok ?
[2]  (__out.push('\n '),
[3]   __out.push(to_html(this.create_link('c', this.session['course']))),
[4]   __out.push('\n ')
[5]  ) : void 0)

私がそれを正しく理解していれば、それは最初\nに関数の結果である\nを出力にプッシュすることを意味します。しかし、最後のpush(4 行目) は、配列内の要素の数を返します。これは、外側push(1 行目) によって配列自体にプッシュされます。

を変更して別のArray.prototype.pushものを返そうとしましたが、さらに混乱しているようです (コア関数であるため)。

于 2012-08-16T14:06:24.617 に答える