我正在尝试将事件绑定到通过附加主干模板放置的元素:
appendEditTemplateAndSetEvents: function() {
var associatedCollection = App.Helpers.findAssociatedCollection(this.allCollections, this.associatedCollectionId);
var template = this.setEditTemplateForElement(associatedCollection.type);
var modalBody = this.$el.find('.modal-body');
modalBody.empty();
var firstModel = associatedCollection.at(0);
if(template.mainTemplate !== null) {
modalBody.append($('#edit-form-element-frame').html());
//each mode in collection
associatedCollection.each(function(model){
if(model.get('positionInContainer') === 1) {
firstModel = model;
}
console.log(model.attributes);
modalBody.find('.elements-in-editmodal-wrapper').append(template.mainTemplate(model.toJSON()));
});
}
if( template.templateValidation.length !== 0 ) {
modalBody.append('<hr><h3>Validateregels</h3>');
_.each(template.templateValidation, function(val, index) {
modalBody.append(val(firstModel.toJSON()));
});
}
//set listeners and handlers that apply when a edit modal is open
this.validationEventsForEditModal(firstModel);
this.editErrorMessagesInModal(firstModel);
},
现在的问题是,当调用最后两个函数时,模板的html尚未附加,因此事件被绑定到长度为0的对象。
有没有人有这个异步问题的解决方案?我试过$ .Defferred但是没有用,但也许有人得到它的工作。
答案 0 :(得分:0)
我在函数中使用this.$el.find(...)
解决了这个问题:
this.validationEventsForEditModal(firstModel);
this.editErrorMessagesInModal(firstModel);
我不知道它是否仍然是一个异步问题,但这解决了它。