这是我的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);
}
});
}
答案 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();
}