3

我最近将 node-blade 智能包添加到我的流星中,并且静态内容显示良好。但是,我无法使用任何模板变量。在我安装刀片之前,模板变量在车把上工作得很好。有人知道我做错了什么吗?

控制台输出

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

客户端.js

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

2 回答 2

3

编辑:现在允许在正文模板中使用助手。

您不能在 head 中使用助手或某些全局变量或身体模板。你甚至不能在 head 包含的模板中使用它们或身体模板。

查看这些链接以获取更多信息:

于 2012-11-09T17:53:59.513 回答
2

编辑:从 Blade 3.0.0 稳定版开始,这个答案不再准确。 body.blade模板可能不包含动态内容,如帮助程序、对 的引用Session等。


“Using Blade with Meteor”中说

头部或正文模板中不允许引用 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 回答