向我的下划线模板添加计数

时间:2014-04-17 13:33:01

标签: javascript backbone.js underscore.js underscore.js-templating

我正在尝试在我的下划线模板中为.each 循环添加唯一ID,但是当我使用 .uniqueId('XX')时,尽管它确实有效,它不断变化,而不是我真正希望它做的事情。

所以这是我的Underscore模板代码,

<script class='BasicText' type='text/template'>
  <% _.each(Text, function(Text) { %>
         <div contenteditable='true' id='<%= _.uniqueId('BasicText') %>' class='MyText'>
            <%= Text.text %>
         </div>
  <% }); %>
</script>

它从我的Backbone代码加载很好,它完成它所说的,它从我的数据库加载简单的基本文本并在我的页面上显示。但_.uniqueId会不断更改它添加的结束数字,是的,它们是唯一的,但我不希望它们改变。

我还做的是将div设置为可编辑,以便可以编辑内容然后重新发送到数据库以进行更新。我的代码工作正常,当div中的内容发生变化时执行,但现在我将目标定位在div标签上。

这样做的问题是它在两者(现在只有两个基本文本字段)div标签上运行。所以这就是为什么我想在内容发生变化时一次只定位一个标签。

那么我可以在_.each循环上设置某种计数,然后将其添加到我的div标签中吗?

或者我可以在我的代码中使用_.uniqueId吗?我的意思是因为_.uniqueId不断改变结束号,它应该在运行时知道它使用了什么数字,对吗? (不确定在这里)如果确实如此,那么即使它们改变了,我也不能让我的代码使用相同的数字吗?

欢迎大家帮助。

感谢。

1 个答案:

答案 0 :(得分:4)

使用三个参数调用传递给_.each的回调:迭代中的当前项,索引和原始列表。因此,您已经提供了所需的索引,您只需更新模板即可使用它。这样的事情应该有效:

<script class='BasicText' type='text/template'>
  <% _.each(Text, function(Text, Index) { %>
         <div contenteditable='true' id='text-div-<%= Index %>' class='MyText'>
            <%= Text.text %>
         </div>
  <% }); %>
</script>

文档here。希望有所帮助,欢呼!