我想创建一个类似于下面的模板/ js组合。我想要的是“集合”模板可以使用两个变量
<template name="collection">
Title: {{title}}
<UL>
{{#each items}}
{{> item}}
{{/each}}
</UL>
</template>
<template name="collection_items">
<LI>{{item_title}}</LI>
</template>
javascript函数的位置如下:
Template.collection.data = function() {
var record = Record.findOne({whatever:value});
return { title: record.title, items: record.items }
}
我尝试过使用Handlebars的{{#with data}}帮助器并返回上面的对象,但这只是撞坏了模板。我尝试过创建一个“顶级”功能,如:
Template.collection = function () {... }
但这也使模板崩溃了。
我想避免的是有两个单独的函数(一个Template.collection.title和一个Template collection.items),其中每个函数都在Record集合上调用一个findOne,其中它实际上是相同的模板和一个调用应该足够了。
有什么想法吗?
答案 0 :(得分:3)
Template.collection = function () {... }
Template.collection不是一个函数,它是一个实例,因此是一个对象。
您可以在控制台中输入Template.collection
以查看必要的内容以及Template.collection.
并自动填充以查看其方法和字段。
对于#with示例,Todos确实似乎没有包含您在评论中概述的那个。因此,可以在此处找到它的示例用法:
https://github.com/meteor/meteor/blob/master/packages/templating/templating_tests.js#L75 https://github.com/meteor/meteor/blob/master/packages/templating/templating_tests.html#L92
这是我尝试的另一个示例,它适用于当前的主分区和开发分支:
<head>
<title>test</title>
</head>
<body>
{{> hello}}
</body>
<template name="hello">
{{#with author}}
<h2>By {{firstName}} {{lastName}}</h2>
{{/with}}
</template>
它的JS部分:
if (Meteor.is_client) {
Template.hello.author = function () {
return {
firstName: "Charles",
lastName: "Jolley"
};
};
}
答案 1 :(得分:0)
您希望避免两种功能的具体原因是什么?
从您的代码示例中我看到一个问题:第一个模板使用此行调用第二个模板:
{{> item}}
但是你的第二个模板不称为“项目”。我相信你的第二个模板应该这样称呼:
<template name="item">
似乎第一次和第二次都有简单的辅助函数。虽然我还没有使用自己的代码,但我相信第二个辅助函数会想要使用'this'约定来引用你所指的集合。
干杯 - 霍林
答案 2 :(得分:0)
var record = Record.findOne({whatever:value})
if (record) {
return record;
} else {
// whatever
return "loading"
}