【发布时间】:2014-05-03 09:32:20
【问题描述】:
我有一个容器 .js-todoslist 用于待办事项列表。对于每个 todolist,我也有几个视图 TodosListView。所有TodosListView 都是从父视图创建并绑定到同一个el .js-todoslist。
Todos 列表不会在初始化时呈现,我需要通过单击按钮来呈现不同的 Todos 列表,因此每个列表都有 showTodolist 显示它的方法。
问题是,虽然目前只有一个列表可以被渲染,但实际上所有列表都被初始化了。当我在渲染列表中按.add-btn 时,所有列表都触发了add 函数(不仅是当前渲染)。
TodosListView = Backbone.View.extend
events:
"click .add-btn": "add"
initialize: (options) ->
self = this
@model = @options.model
# I've tried to undelegate event after initialize, but no luck
# @$el.undelegate('.add-btn', 'click');
# @undelegateEvents()
# show this todolist
showTodolist: ->
@$el.html @template(@model.toJSON())
render: ->
@
add: ->
console.log "Add to Todos list #" + @model.get("id")
如何避免这种情况(除了为每个列表创建不同的视图)?谢谢。
【问题讨论】:
-
试试主干的setElement方法
-
@meshuai,你的意思是在调用
showTodolist之后使用setElement指定el属性? -
渲染差异待办事项列表后
标签: javascript backbone.js backbone-views backbone-events