在骨干内部访问后,Dom元素未更新

时间:2016-01-07 21:52:06

标签: jquery backbone.js render backbone-views backbone-events

这是我的render()函数:

initialize: function() {
    this.selectDivView = new SelectView({
        url: '/ir/secure/api/v40/myvariants/myVariantDBs',
        method: 'POST',
        template: myVariantDBFilterTemplate
     });
},

render: function() {
    this.$el.html(template()); //has div for "select drop down"
    this.selectDivView.setElement(this.$(this._selectDivId)).render();
    this.afterRender();
},

afterRender: function() {
    this.$(this._selectEl).val();
    //Expected to get some value but the select control is not yet rendered in dom
}

我尝试按照此链接中提到的方式进行操作 Backbone.js event after view.render() is finished但无法访问DOM元素。

这是我的Select控件的手柄模板selectDiv.html

{{#each filters}}
<option value="{{id}}">{{name}}</option>
{{/each}}

我猜我在afterRender()时没有刷新DOM。可以在这做什么?

我的SelectDivView渲染功能

render: function(selectedValue) {
    this.selectedValue = selectedValue;
        $.ajax({
            url: this.url,
            method: this.method,
            async: false,  // THIS IS THE DECIDING PROPERTY.
            success: function(data) {
                    that.filters = data;
                    that._doRender.call(that);
            }
        });
}

2 个答案:

答案 0 :(得分:0)

添加ajax属性

async: false

在selectDivView的渲染功能中解决了这个问题。

以下是select div的渲染功能如何

render: function(selectedValue) {
    this.selectedValue = selectedValue;
        $.ajax({
            url: this.url,
            method: this.method,
            async: false,  // THIS IS THE DECIDING PROPERTY.
            success: function(data) {
                    that.filters = data;
                    that._doRender.call(that);
            }
        });
}

答案 1 :(得分:-1)

你手动绑定了afterRender吗?

initialize: function(options) { 
  _.bindAll(this, 'beforeRender', 'render', 'afterRender'); 
  var _this = this; 
  this.render = _.wrap(this.render, function(render) { 
    _this.beforeRender(); 
    render(); 
    _this.afterRender(); 
  });
},

render: function() {
    this.$el.html(template()); //has div for "select drop down"
    this.selectDivView.setElement(this.$(this._selectDivId)).render();
    return this;
},

afterRender: function() {
    this.$(this._selectEl).val();
}