backbonejs 视图事件重复执行
发布于 9 年前 作者 luoshizheng 4981 次浏览 最后一次编辑是 8 年前 来自 问答

我有2个视图,分别是显示不同的列表。但是在切换列表的时候,在点击列表下面的分页按钮出现重复请求服务器的地址,并且重复请求的次数是随着我切换两个视图的次数来不断增加的。不知道是什么原因。如果是单个视图的时候,请求是正常的。有谁对backbonejs比较熟悉的吗? 还是我程序本身有问题。 第一次切换视图: GET /Pictures/:PageSize/:PageIndex?PageSize=20&PageIndex=3 200 14ms GET /Pictures/:PageSize/:PageIndex?PageSize=20&PageIndex=3 200 17ms

第二次切换视图: GET /Pictures/:PageSize/:PageIndex?PageSize=20&PageIndex=3 200 14ms GET /Pictures/:PageSize/:PageIndex?PageSize=20&PageIndex=3 200 17ms GET /Pictures/:PageSize/:PageIndex?PageSize=20&PageIndex=3 200 18ms

10 回复

很明显,视图没有得到正常消除,事件一直在重复绑定

@qinyang912 请问该如何释放视图,每次都让它从新加载呢。 因为我列表页面我是用过模版来直接加到主页上的。

@luoshizheng 关闭视图的时候,要remove,才能把视图和视图绑定的事件给清理掉。

@qinyang912 关闭视图? 我需要给这个视图bind一个close 方法吗? 刚接触backbone, 还请详细讲解一下,谢谢。

试试这个,把你之前绑定的都取消掉。需要这个view的时候再绑定。 undelegateEvents() Removes all of the view’s delegated events. Useful if you want to disable or remove a view from the DOM temporarily.

backbone的view 里有个remove的方法 view.remove() Removes a view from the DOM, and calls stopListening to remove any bound events that the view has listenTo’d.

因为你把事件重复绑定在同一节点上了,所以每次new视图的时候都会重新绑定事件。

@chenshaonian 嗯是的, 因为这个功能是通用的, 所有我每个视图加载的时候都对它进行了绑定事件。 就是不知道如何释放这个视图, 如果我新开一个页面就是正常了。

@tanker327 undelegateEvents() 用当前视图调用吗, 但是我试过了, 好像还是不行呢。

@luoshizheng 一个简单的方法,就是在new新视图的时候先判断有没有视图的实例。如果有的话就undelegateEvents() 呗。

回到顶部