1

我有一个视图,它为列表中的每个项目创建一个子视图。我们一般称它们为 ListView 和 ListItemView。我在 ListItemView 上附加了如下事件:

events: {
    "click .remove": "removeItem"
}

我为 ListItemView 生成了模板生成的 html,大致如下所示(将 lb/rb 交换为 {/},以便您可以看到“非法”html):

{div class="entry" data-id="this_list_item_id"}
这里有一些东西
{div class="meta"}
{a class="remove" href="javascript:;"}[x]{/a}
{/ div}
{/div}

问题是,当单击任何 [x] 时,所有 ListItemViews 都会触发它们的 removeItem 函数。如果我让它脱离了这个模型的 id,那么我会删除页面上的所有项目。如果我让它离开单击项目的父元素的父元素来获取数据 ID,我会删除每个 ListItemView 实例。有没有办法创建一个只会触发单个 removeItem 的特定于实例的事件?

如果我让 ListView 持有 ListItemView 的单个实例并重新分配 ListItem 模型并为列表中的每个项目呈现它就可以工作。我最终只触发了一个动作(removeItem)。问题是,我必须找到点击目标的父级才能找到 data-id attr。就个人而言,我认为下面的代码片段相当难看,想要更好的方法。

var that = $($(el.target).parent()).parent();

任何人提供的任何帮助将不胜感激。

4

2 回答 2

1

您的哈希似乎events在您的 ListView 上。

如果是,那么您可以将events哈希移动到 ListItemView 并且您的removeItem函数可以如下

removeItem: function() {
  this.model.collection.remove(this.model);
}

如果不是这种情况,您能否提供您的 ListView 和 ListItemView 代码,以便我查看。

于 2012-01-04T22:38:32.613 回答
0

一个疯狂的猜测,但可能;检查您呈现的 html 是否有效。由于 html 格式错误,dom 可能会进入 tiz

于 2012-01-05T22:48:25.343 回答