0

我正在尝试将事件绑定到通过附加主干模板放置的元素:

 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 但这没有用,但也许有人让它工作。

4

1 回答 1

0

我通过this.$el.find(...)在函数中使用解决了这个问题:

this.validationEventsForEditModal(firstModel);
this.editErrorMessagesInModal(firstModel);

我不知道它是否仍然是一个异步问题,但这解决了它。

于 2013-07-12T07:19:32.827 回答