2012-07-08 46 views
3

我想创建一个类似于下面的模板/ 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 } 
} 

我用把手{{#with尝试数据}}助手并返回一个对象,但刚刚崩溃了模板。我试图创建一个'顶级'功能,如:

Template.collection = function() {... } 

但也崩溃的模板。

我试图避免的是有两个单独的函数(一个Template.collection.title和一个模板collection.items),其中每个函数调用Record集合上的findOne,其中它的模板和模板实际上是相同的电话应该就够了。

任何想法?

+0

为什么不返回记录本身?我相信你也可以使用'{{something.something}}' – 2012-07-08 20:39:20

+0

这就是我的想法,但它不起作用。 – Harel 2012-07-08 21:10:55

+0

如果我把{{record.field_a}}和{{record.field_b}}两次调用'record'函数,这不仅不起作用,而且还会破坏我想要做的事情的目的。 – Harel 2012-07-08 21:21:43

回答

3
Template.collection = function() {... } 

Template.collection不是一个函数,它是一个实例,因此也是一个对象。

您可以在控制台中键入Template.collection以查看必需的内容以及Template.collection.以及自动完成功能以查看其方法和字段。


对于#例如,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

这里是我试过了两个工作当前主和devel的分支又如:

<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" 
    }; 
    }; 
} 
0

为什么你希望避免两个功能的具体原因?

从您的代码示例我看到一个问题:第一个模板是调用第二模板,这条线:

{{> item}} 

但是你的第二个模板是不是所谓的“项目”。我相信,你的第二个模板应该被称为是这样的:

<template name="item"> 

看来,这将是足够简单,具有辅助功能的第一和第二位。虽然我没有得到它来处理我自己的代码,但我相信第二个帮助函数会希望使用'this'约定来引用您所指的集合。

Cheers - holling

+0

是的模板命名是一个错字。应该是collection_item。无论如何,两个函数意味着两次调用mongo来加载记录。项目列表是项目的数组。我的问题原来是我对反应性的一个愚蠢的误解(我会在一秒内发布原因) – Harel 2012-07-11 19:30:44

0

Tom的回答是正确的。我只想叮叮当当地添加,在我的情况下,为什么#with失败的原因是因为流星的'被动'性质,我第一次调用加载模型导致'undefined',我没有检查它。一小部分后,它被装载好。 道德是做类似

var record = Record.findOne({whatever:value}) 
if (record) { 
    return record; 
} else { 
    // whatever 
    return "loading" 
}