3

最近、node-blade スマート パッケージを meteor に追加したところ、静的コンテンツが正常に表示されました。ただし、テンプレート変数を使用できません。ブレードをインストールする前は、テンプレート変数はハンドルバーで正常に機能していました。私が間違っていることを誰かが知っていますか?

コンソール出力

ReferenceError: player is not defined
    at ~/meteor/project/views/info.blade:1:1

1 > .player-name.large= player.name
2 | .alliance-name= alliance.name
3 | .world-name= world.name
4 | 

    at eval (eval at <anonymous> (/usr/local/lib/node_modules/blade/lib/compiler.js:138:23))
    at /usr/local/lib/node_modules/blade/lib/runtime.js:323:5
    at runtime.loadTemplate (/usr/local/lib/node_modules/blade/lib/runtime.js:272:6)
    at /usr/local/lib/node_modules/blade/lib/blade.js:45:4
    at Compiler.compile (/usr/local/lib/node_modules/blade/lib/compiler.js:185:2)
    at compile (/usr/local/lib/node_modules/blade/lib/blade.js:41:12)
    at Object.compileFile (/usr/local/lib/node_modules/blade/lib/blade.js:66:3)
    at Object.runtime.loadTemplate (/usr/local/lib/node_modules/blade/lib/runtime.js:269:23)
    at Object.runtime.include (/usr/local/lib/node_modules/blade/lib/runtime.js:320:22)
    at eval (eval at <anonymous> (/usr/local/lib/node_modules/blade/lib/compiler.js:138:23))
Your application is crashing. Waiting for file change.

情報ブレード

.player-name.large= player.name

client.js

if(Meteor.is_client) {
    Template.info.player = function(){
        var data = Session.get( 'data' );
        return data.player;
    };
}
4

2 に答える 2

3

編集:ヘルパーはボディテンプレートで許可されるようになりました。

ヘルパーや特定のグローバル変数をheadで使用することはできませんまたは体テンプレート。頭に含まれているテンプレートでそれらを使用することさえできませんまたは体テンプレート。

詳細については、次のリンクを確認してください。

于 2012-11-09T17:53:59.513 に答える
2

編集:この回答は、Blade 3.0.0 安定版では正確ではなくなりました。 body.bladeテンプレートには、ヘルパーや への参照Sessionなどの動的なものを含めることはできません。


メテオでブレードを使用する」では、次のように述べています

head テンプレートまたは body テンプレートでは、Session への参照は許可されていません。これは仕様によるものであり、バグではありません。Handlebars では、タグ内で Session または Meteor を使用できましたが、タグ内では使用できませんでした。私は Handlebars の実装が気に入らなかったので、これで行き詰まっています。body.blade テンプレートは、主に静的コンテンツ (読み込みページなど) 用です。アプリケーションがロードされたら、次のことができます$("body").replaceWith(Meteor.ui.render(Template.homepage) )。アプリケーションコードから。

したがって、これは、初期化時に動的に生成されたテンプレートを持つことができなかったことを示しています。

これを回避するには、ドキュメントが提案しています

$("body").replaceWith(Meteor.ui.render(Template.homepage) )

replaceWithメソッドをメソッドに置き換えましhtmlた。私のために働いている例を見てください:

# ./the_cow.coffee
if Meteor.isClient
  $ ->
    $('body').html Meteor.render -> Template.test
      user:
        name: 'Pill'

# ./views/test.blade
#test Testing
p= user.name

コンパイルされた JavaScript を参照してください。

if (Meteor.isClient) {
  $(function() {
    return $('body').html(Meteor.render(function() {
      return Template.test({
        user: {
          name: 'Pill'
        }
      });
    }));
  });
}

もっと短い書き方があるかどうかはわかりません。

于 2012-11-07T21:27:41.300 に答える