2015-11-04 144 views
0

这段代码来自Meteor的第一个应用教程,我对“任务(task)”这个词的作用有些困惑。初学者流星模板

在HTML文件时,它是一个模板,它是由{{> task}}<body>

在js文件叫的名字,它被用来声明集合:

Tasks = new Mongo.Collection("tasks"); 通过这意思是“任务”是“任务”的集合

任务也是js文件中函数的名称 - >tasks: function() 它将“任务”列表返回到html文件,它是所谓以这样的方式

{{#each tasks}} 
    {{> task}} 
    {{/each}} 

看来的“任务”的含义既是数据元组则返回一个函数的名称,和。这是正常的吗?调用<body>中的该语句时,将调用模板“任务”以格式化返回“任务”列表的函数“任务”返回的数据。这是正常的吗?

HTML文件:

<body> 
<div class="container"> 
<header> 
    <h1>Todo List</h1> 
</header> 

<ul> 
    {{#each tasks}} 
    {{> task}} 
    {{/each}} 
</ul> 
</div> 
</body> 

<template name="task"> 
<li>{{text}}</li> 
</template> 

JS文件

Tasks = new Mongo.Collection("tasks"); 

if (Meteor.isClient) { 
// This code only runs on the client 
    Template.body.helpers({ 
    tasks: function() { 
    return Tasks.find({}); 
    } 
}); 

回答

0

我可以看到如何在第一混乱,一个可能更喜欢的变量,函数,助手和集合,以避免混淆不同的命名。但是,是的,> tasks指的是模板(将被嵌入)。在正文中,您需要使用#each tasks来引用辅助函数(tasks)。因此,其实这里还有只有三个项目:

  • Tasks,收集保存数据,
  • tasks,辅助功能,从提供给模板引擎的Tasks集合使得数据(使用中提到的body#each tasks),
  • task呈现给定任务的模板。
1

同意该示例重用名称,这是一种相当普遍的模式。也许每个名字的解释可能帮助:

Tasks = new Mongo.Collection("tasks"); 
  • 任务在右手边是的MongoDB集合的名称。如果你进入蒙戈外壳比如你会看到文档中db.tasks收集
  • 任务的左手侧是要在的JavaScript在您的流星使用的集合名称应用程序,都在客户端和服务器上。一个典型的使用任务将javascript代码,如Tasks.find({})

任务出现在spacebars模板代码HTML文件是相当不同的。

{{#each tasks}} 
    {{> task}} 
{{/each}} 
  • 任务模板助手函数返回一个指针或数组
  • 任务是指个体模板你已经在HTML创建。你可以告诉它,因为模板参考>

你可以用TASKLISToneTask更换任务任务在你的模板,这将是蛮好的一个模板。但是,您无法在JavaScript中开始使用MyTasks.find(),也无需在集合作业左侧重命名您的Tasks集合。

有一个非官方的约定,mongo集合名称是小写,而流星集合名称(在js中)是正确的情况。集合名称是js中的全局变量,因此正确的情况可以帮助区分它们。