gpt4 book ai didi

javascript - Meteor 的新功能和辅助功能不起作用

转载 作者:行者123 更新时间:2023-11-30 09:58:22 26 4
gpt4 key购买 nike

我正在学习 meteor ,我无法让我的辅助函数返回一些静态文本。

<head>
<title>LeaderBoard</title>
</head>

<body>
<h1>Leaderboard</h1>

<p>{{player}}</p>
</body>

在 JS 中

if(Meteor.isClient){
Template.leaderboard.helpers({
player: function(){
return "text";
}
});

}

这只返回排行榜标题

更新:变成: 排行榜

<body>
<h1>Leaderboard</h1>

<p>{{player}}</p>
</body>
<template name="leaderboard">
{{player}}
</template>

和JS还是一样,还是不行

最佳答案

所以,你犯的错误很少。让我们解构它。

什么是模板?

模板是呈现到 DOM 中的一段代码,可以使用助手、事件等进行操作。要使用任何模板,必须存在一个模板。它们既可以从包中放入您的应用程序中,也可以由您自己制作。在这种特殊情况下,您正在寻找后者。

要定义模板,选择任何 HTML 文件或创建一个新文件并以 HTML 方式定义它:

<template name="theTemplate">
Hello, I am the template.
</template>

现在您可以使用以下语法将此模板注入(inject) DOM 中您想要的任何位置:

<body>
<h1>My super app</h1>
<div>{{> theTemplate}}</div>
</body>

它将渲染成

<body>
<h1>My super app</h1>
<div>
Hello, I am the template.
</div>
</body>

或者,事实上,一些更丑陋的东西,因为 Meteor 保留了所有的缩进和东西。

如何将可变文本放入模板中?

您说得对,您需要 helper 。助手是一个函数,它返回一个按原样注入(inject)的对象(可以是字符串、数字等),就好像它是 document.writed。

任何模板的助手都是这样定义的:

Template.theTemplate.helpers({
coolestString: function () {
return 'I am the coolest string put by a helper.';
}
});

请注意,Template 对象包含 theTemplate 属性。它恰好发生在 Meteor 获取您的模板定义,然后使用 helpers 方法(以及其他一些有用的方法)将其存储到一个对象中之后。

如果删除 theTemplate 模板定义(又名 HTML),Template 对象将没有其 theTemplate 属性,整个事情将抛出 TypeError,因为您尝试访问 undefined 的属性。

如何将助手返回的值放入模板中?

只需使用 {{ ... }} 语法。比如说,你有一个助手 coolestString,你需要从它获取值,不管它是什么,然后放入 h1 标签中:

<template name="theTemplate">
<h1>{{ coolestString }}</h1>
</template>

注意 {{> ...}}{{ ...}} 之间的区别。前者注入(inject)一个模板,后者从当前上下文中注入(inject)一个值;模板的助手保留在它的根上下文中(或者如果您还不了解上下文就忘记它)。

那么,我应该怎么做才能在我的应用中使用模板?

总结一下

  1. 定义一个模板。
  2. 可选地,定义它的助手。每个助手应该返回一个字符串、一个数字、一个数组或一个对象。
  3. 使用 {{ ... }} 语法在模板中访问助手的值。
  4. 使用 {{> ...}} 语法将模板插入到您的文档中。

就是这样。

好的,给我看完整的代码!

myCoolestApp.html中,

<body>
{{> theTemplate}}
</body>

<template name="theTemplate">
{{ coolestAppName }}
</template>

myCoolestApp.js 中,

if (Meteor.isClient()) {
Template.theTemplate.helpers({
coolestAppName: function () {
return 'My super cool app!';
}
});
}

完成!

但是如果我想省略模板怎么办?

一般来说,helper 根据定义属于某个模板,所以注入(inject)的层次结构是主体,然后是模板,然后是 helper。但是可以将助手直接注入(inject)文档主体并省略中间模板。您可以使用 Template.registerHelper 方法这样做:

Template.registerHelper('theHelper', function () {
return 'I am helper'; // add some logic here and see how it works; hint: reactively.
});

然后您要做的就是将其放入您的文档中:

<body>
{{ theHelper }}
</body>

渲染到

<body>
I am helper
</body>

Template.registerHelper 背后的原理是 DRY,不要重复自己。有时您需要向多个模板提供完全相同的数据,所以一开始您会认为您必须复制帮助程序代码。但这种方法有助于避免不必要的重复。

您可以使用更复杂的对象,通过这种方式覆盖更复杂的逻辑,或者您甚至可以直接将 Mongo 集合放入文档中。

关于javascript - Meteor 的新功能和辅助功能不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32826889/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com