-1

在流星的“todos”示例中。有 2/3 行代码我不明白。在 todos.js 文件中:

Template.todo_item.tag_objs = function () {
   var todo_id = this._id;
   return _.map(this.tags || [], function (tag) {
     return {todo_id: todo_id, tag: tag};
  });
};

你能帮助我吗?

4

1 回答 1

1

tag_objs 帮助器返回一个标签数组,以便在 todo_item 模板中正确显示它们。他们本可以返回“this.tags || []”,这意味着“如果有的话,返回这个待办事项的标签数组,否则返回一个空数组”。如果直接返回原始数据数组,则必须使用以下语法在模板中循环遍历它:

{{#each tag_objs}}
    {{this}}
{{/each}}

this 关键字将引用当前被迭代的标签,但这并不是那么明显,从代码清晰的角度来看,开发人员有时更喜欢有一个专门的命名助手。所以基本上这就是辅助定义中正在完成的工作:我们将每个标记值下划线映射到一个新构造的对象,并具有我们将要成为的正确的“ todo_id ”和“tag”属性能够在模板代码中引用,因此我们现在可以使用 {{tag}} 来代替 {{this}}。

_.map 只是将 ["tag1","tag2","tag3"] 转换为

[{
    todo_id:"ID",
    tag:"tag1"
},{
    todo_id:"ID",
    tag:"tag2"
},{
    todo_id:"ID",
    tag:"tag3"
}]
于 2013-10-10T14:35:09.223 回答