0

这几天我一直在努力解决这个问题!

用例是我认为非常常见的用例。我有一个按钮 ( <button id="add-item">),可将新项目元素 ( <div class="item">) 添加到容器元素 ( <div id="list">) 中,容器元素 ( ) 又应<form>在面板 ( ) 中显示该项目的表单 ( <div id="panel">)。我希望能够单击项目并让面板显示特定于项目的表单。

问题唯一识别点击事件的项目是最后添加的项目;以前添加的项目视图都不会识别点击。

我之前在List视图上设置了一个点击事件,.item但 Backbone.js 社区的一位知名成员告诉我,项目视图确实应该自己处理点击,而不是将该责任委托给它的容器。

为了帮助可能有助于理解问题的您,我创建了一个极其精简且独立的示例来说明。您可以在以下三 (3) 个位置中的任何一个位置看到它:

此外,如果您对如何更好地构建此代码有任何建议,我会 100% 热情地听到它们;我是 Backbone.js 的新手,并不觉得我完全理解它的模式、实践和习语。

PS 我已经在 StackOverflow 上阅读了所有我能找到的内容,但我找不到任何解决问题的方法,所以如果你想以重复的形式结束我的问题,请帮我一个忙,并首先确保它实际上是重复的。

更新

我正在修复代码,但将错误this.$el.empty()注释掉,以便其他有相同问题的人可以从中学习。感谢@sardine/@ tollmaz在 Twitter 上帮助我解决这个问题。

4

1 回答 1

1

根据Twitter 对话,事实证明问题在于:

this.$el.empty();

创建新项目时,将设置事件。单击该项目后,将select执行该方法。作为该方法的一部分,一个实例app.ListView执行它的render方法。在这个方法中,$el实际上#list是 的 被清空了。因此,先前创建的带有工作事件的视图被核弹了。虽然在视觉上重新填充了该事件,但从未重新创建该事件(不知道为什么会这样)。

于 2013-07-19T19:58:36.883 回答