Javascript 主干视图事件绑定延迟
我在初始化视图时触发事件时遇到问题。如果我使用setTimeout调用该事件,则会触发该事件。但是,该事件不会在视图初始化时触发Javascript 主干视图事件绑定延迟,javascript,events,backbone.js,Javascript,Events,Backbone.js,我在初始化视图时触发事件时遇到问题。如果我使用setTimeout调用该事件,则会触发该事件。但是,该事件不会在视图初始化时触发 /*global app */ define([ 'handlebars', 'text!templates/achievements.html' ], function (Handlebars, AchievementsTemplate) { "use strict"; var AchievementsView = Backbone.View.ex
/*global app */
define([
'handlebars',
'text!templates/achievements.html'
], function (Handlebars, AchievementsTemplate) {
"use strict";
var AchievementsView = Backbone.View.extend({
achievementsTemplate: Handlebars.compile(AchievementsTemplate),
initialize: function () {
var el = this.render(this.model);
this.$weekFilter = $(el).find(".challenge-nav li.open a");
this.model.bind('change', this.resetFilters, this);
this.resetFilters();
},
render: function (model) {
this.$el.html(this.achievementsTemplate(model.toJSON()));
return this.$el;
},
events: {
"click .challenge-nav li a": "filterAchievements"
},
resetFilters: function () {
this.$weekFilter.first().trigger("click");
},
filterAchievements: function (ev) {
console.log("test");
}
});
return AchievementsView;
});
上面没有调用resetFilters函数,但是如果我执行setTimeout,则会调用该函数。唯一的猜测是,这些活动很晚才开始?有什么想法吗
Hi All,
/*global app */
define([
'handlebars',
'text!templates/achievements.html'
], function (Handlebars, AchievementsTemplate) {
"use strict";
var AchievementsView = Backbone.View.extend({
achievementsTemplate: Handlebars.compile(AchievementsTemplate),
initialize: function () {
var el = this.render(this.model);
this.$weekFilter = $(el).find(".challenge-nav li.open a");
this.model.bind('change', this.resetFilters, this);
this.resetFilters();
},
render: function (model) {
this.$el.html(this.achievementsTemplate(model.toJSON()));
return this.$el;
},
events: {
"click .challenge-nav li a": "filterAchievements"
},
resetFilters: function () {
var self = this;
setTimeout(function () {
self.$weekFilter.first().trigger("click");
},100);
},
filterAchievements: function (ev) {
console.log("test");
}
});
return AchievementsView;
});
如果
$weekFilter
DOM元素不是成就模板的一部分,因此在初始化小部件时它在DOM中,那么问题是所有事件都是在初始化后委派的。请参阅主干网的源:
为什么不将this.resetFilters()
移动到render()
?如果确定未调用resetFilters
,请尝试在其中添加控制台.log
。我猜问题在于调用该方法时,this.$weekFilter
DOM元素没有完全填满。Ya this.resetFilters()肯定正在被调用。控制台。记录它。问题是,当我触发click事件时,不会调用FilterAchievents。甚至连console.logged(this.$weekFilter)都可以查看它是否已加载到DOM中,确实如此。我仍然认为问题在于this.$weekFilter
在self.$weekFilter.first()时未加载。$weekFilter.first().trigger(“单击”)代码>被调用,尝试console.log(self.$weekFilter.first())
就在self.$weekFilter.first().trigger(“单击”)之前代码>。绝对可以。将在今晚完成并恢复。