5

バグのソース コードはこちらです。

通常のループを使用して Meteor の配列をループしているとしましょう{{#each}} 。各配列要素は文字列であり、 を使用してすべてのステップで文字列を出力します{{this}}。ここまでは順調ですね!ハンドルバー ヘルパーを使用して確認typeofするthisと、string. 甘い!すべてが本来あるべき姿です。

しかし、{{#if something }}内部に -helperを追加すると{{#each}}(somethingは true を返すだけなので、続けて出力します{{this}})、文字列は HTML で適切に表示されますが、現在objecttypeofチェックされています!

(typeof someVarINeedToTest === 'string')私のコードが依存している可能性があるすべてのコードがfalseを返すため、これは非常に面倒です。

私は何か間違ったことをしていますか?

それともこれは実際のバグですか?

もしそうなら: Meteor 固有またはハンドルバー固有のバグですか?

ありがとう!

ああ:ソース リンクをもう一度. プルして実行meteorし、ブラウザ コンソールを確認するだけです。

4

1 に答える 1

5

これはthis、JavaScript では変数が常にオブジェクトであると想定されているためです。someFunction.apply(someContext);ハンドルバーによって呼び出されると、JavaScript はsomeContext開始時のオブジェクトに関係なくオブジェクトに変わります。ここで例を参照してください: http://jsfiddle.net/SyKSE/1/

(この場合、ステートメントsomeFunction内にあるテンプレートの部分を表します。){{#if}}

シンプルな (醜い) 回避策は、常にデータをオブジェクトとして渡すことです。

['this', 'is', 'an', 'array', 'that', 'we\'re', 'looping', 'through'];

になります:

[{val: 'this'}, {val: 'is'}, {val: 'an'}, {val: 'array'}, {val: 'that'}, {val: 'we\'re'}, {val: 'looping'}, {val: 'through'}];

valそして、代わりに見るようにテンプレートを変更しますthis

于 2013-11-14T20:49:10.383 に答える