1

私は 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 と一致するかどうかを確認し、一致したカテゴリの名前を返します。しかし、カテゴリが表示されません。そのため、カテゴリの名前を適切に返していないと思います。コールバック関数で console.log すると、コンソールに表示されますが、返されません。

あなたはなにか考えはありますか?この問題の解決策を提案していただけますか? ありがとう。

4

1 に答える 1

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');
}
于 2013-03-07T17:57:01.403 に答える