gpt4 book ai didi

javascript - 路由更改时从 Backbone View 中清除间隔

转载 作者:行者123 更新时间:2023-11-28 02:27:31 24 4
gpt4 key购买 nike

我在此 View 中有一个间隔

var QuestionsView = Backbone.View.extend({
render: function(){
var view = this;
this.updateQuestionsIntervalId = setInterval(function() {view.refreshQuestionLists()}, 3000);
),

refreshQuestionLists: function() {
this.questions.fetch({
...
});
},

navigateAway: function() {
clearInterval(this.updateQuestionsIntervalId);
}

});

理想情况下,我希望 QuestionView.navigateAway() 在路线更改时运行。我可以这样做吗?

谢谢

最佳答案

作为一种省力的解决方案,您可以将 View 方法直接绑定(bind)到 router:route 事件,该事件在每次路由器将 URL 更改与任何定义的路由相匹配时触发:

var QuestionsView = Backbone.View.extend({
initialize: function(){
this.listenTo(yourRouter, 'route', this.navigateAway);
)
});

这应该可行,但对我来说感觉就像意大利面条。

我通常在 View 上实现一个 onBeforeClose 方法,在离开当前 View 之前调用该方法。大概是这样的:

var Router = Backbone.Router.extend({
navigateToView: function(view) {
//I've actually abstracted this logic to a separate
//view manager class, but you get the idea...
var current = this.currentView;
if(current) {
if(current.onBeforeClose)
current.onBeforeClose();
current.remove();
}

this.currentView = view;
//render your current view here, however you like
$(body).html(this.currentView.render().el);
},

someRoute: function() {
var view = new SomeView();
this.navigateToView(view);
}
});

这更像是一个约定。如果 View 没有 onBeforeClose 方法,则不会调用该方法,并且不会造成任何损害。

请注意,这需要您使用一种集中方法(在本例中为 navigateToView)来渲染 View ,但这是一件好事,因为您应该使用 remove< 清理旧 View 不管怎样。

关于javascript - 路由更改时从 Backbone View 中清除间隔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14707183/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com