等待骨干模板附加到dom

时间:2013-07-11 08:15:32

标签: backbone.js asynchronous

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

 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但是没有用,但也许有人得到它的工作。

1 个答案:

答案 0 :(得分:0)

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

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

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