Backbone.js调用模板中的函数返回undefined

时间:2013-03-07 17:53:53

标签: function backbone.js return-value

我正在构建一个todo应用程序,我有一个任务视图,它呈现一个任务模板,每个任务都有一个用户选择的类别。每个任务都有一个CategoryId属性。我想显示每个任务的类别。所以我在任务视图中有以下功能:

getCategoryName: function (categoryId) {
    return app.Categories.each(function (category) {
        if (categoryId === category.get('CategoryId')) {
            return category.get('CategoryName');
        }
    });
}

这是任务模板:

<script type="text/template" id="taskTemplate">
<div class="view">
    <input class="toggle" type="checkbox" <%= Completed ? 'checked' : '' %> />
    <label class="title"><%- Description %></label>
    <section class="info">
        <span class="category"><%- this.getCategoryName(CategoryId) %></span>
    </section>
    <button class="destroy"></button>
</div>
<input class="edit" value="<%- Description %>" />
</script>

我调用getCategoryName函数并传递任务的CategoryId。然后,该函数遍历每个类别,并检查传递的CategoryId是否与Category集合中的类别的id匹配,然后返回匹配类别的名称。但没有类别显示。所以我想我没有正确地返回该类别的名称。当我在回调函数中调试它时,它会出现在控制台中,但不会返回。

你有什么想法吗?你能建议解决这个问题吗? 感谢。

1 个答案:

答案 0 :(得分:0)

Collection.each实际上并没有返回任何内容;它只是遍历集合中的项目并为每个项目执行回调函数。您应该使用Collection.find代替:

getCategoryName: function (categoryId) {

  //find model that matches
  var category = app.Categories.find(function (category) {
    return categoryId === category.get('CategoryId');
  });

  //return the name if found, otherwise returns undefined
  if(category)
    return category.get('CategoryName');
}