Jquery 在主干afterRender()内访问时未更新Dom元素
下面是我的render()函数:Jquery 在主干afterRender()内访问时未更新Dom元素,jquery,backbone.js,render,backbone-views,backbone-events,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() { t
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
}
我试着用这个链接中提到的方式来做
但无法访问DOM元素
这是我的Select控件的把手模板selectDiv.html
{{#each filters}}
<option value="{{id}}">{{name}}</option>
{{/each}}
您是否手动绑定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();
}
添加ajax属性
async: false
在渲染功能中,selectDivView解决了这个问题
下面是selectdiv的render函数的样子
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);
}
});
}
我就是这么做的。但是在渲染后的内部,选择控件还没有使用选项进行渲染。我明白了。在afterRender内部停止时,是否可以使用控制台找到选择控件?或者根本就没有渲染?我可以在控制台中看到select控件。但它不使用选项进行渲染。但一旦退出浏览器上的afterRender(),我就可以正确地看到包含所有值的select控件。已尝试。它不起作用了。我猜这也是你之前建议的。也许你在
selectDivView
的render
方法中做了一些异步的事情。除非我们看到代码,否则我们无法确定。请分享@t-j,非常感谢。您的语句“也许您正在selectDivView的呈现方法中执行异步操作”给了我答案。您好,同步ajax请求已被弃用。。。如果你正在使用最新版本的浏览器,比如chrome,你应该在开发者工具中看到一条警告。。。最好在请求成功后返回xhr对象并访问该值
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);
}
});
}