1

変数でHandlebars.compileを使用するとうまく機能しますが、Coffee クラスのプロパティに関数を配置すると、未定義のバグが発生しますか? または、基本的な Java/Coffee 機能が不足していますか?

私のフィドルがあります:http://jsfiddle.net/Cl0udW4lk3r/BpY5b/

class Test
  template: Handlebars.compile (
    """
    {{#iterate data}}
        <p>{{data}}</p>
    {{/iterate}}
    """
  )

template = Handlebars.compile (
  """
  {{#iterate data}}
    <p>{{data}}</p>
  {{/iterate}}
  """
)

バックボーンが動作している別のフィドルがあります: http://jsfiddle.net/Cl0udW4lk3r/D3FR9/20/

- - アップデート - - -

私の最初のフィドルは解決されました(ただし、ハンドルバーのバージョンは古くなっています)、エラーは愚かな OOP 不注意でした...

しかし!私の2番目のフィドル(そして、最初のフィドルのハンドルバーリソースを更新したので、最初のフィドルも更新しました..)エラーが発生します

TypeError: コールバックは関数ではありません

コールバック部分が正しく処理されていないようです...コーヒークラスでも単純な変数の場合でもエラーは同じです...

4

2 に答える 2

3

あなたがこれを言うとき:

class Test
  template: ...

インスタンスプロパティとして定義templateしているので、見る前にインスタンスを作成する必要がありますtemplate:

t = new Test
console.log(t.template)

または、のプロトタイプtemplateを掘り下げることもできます。Test

console.log(Test::template)

templateクラスプロパティになりたい場合:

class Test
  @template: ...

デモ: http://jsfiddle.net/ambiguous/tvDpN/


2 番目の問題は、Handlebars ヘルパーの呼び出し方法の変更に関連しています。fn.inverse最後の引数は以前はコールバック関数であり、{{else}}ブロックに使用していました。.fnヘルパーの最後の引数は、関数 inと else-block 関数 in を持つオブジェクトになりました.inverse。したがって、Handlebars の最新バージョンの場合、ヘルパーは次のようになります。

Handlebars.registerHelper 'iterate', (context, callback) ->
    switch typeof context
        when 'object' then (callback(key: key, value: value) for own key, value of context).join ''

次のようになります。

Handlebars.registerHelper 'iterate', (context, options) ->
    switch typeof context
        when 'object' then (options.fn(key: key, value: value) for own key, value of context).join ''

デモ: http://jsfiddle.net/ambiguous/NQZTG/

于 2013-03-04T06:38:24.663 に答える
2

これは、クラスの新しいインスタンスをインスタンス化してそのインスタンスのプロパティを検査するのではなくtemplate、クラス自体のプロパティを検査しているためです。以下が機能するはずです。TestTest

$ ->
  console.log new Test().template
  console.log template
于 2013-03-04T06:38:13.047 に答える