我希望在渲染骨干视图之前传递一个额外的变量(userid)。我正在使用ajax请求获取额外变量,但因为是异步的,我认为我的页面在获取变量之前正在呈现。为简单起见,我想在骨干视图中有这个:
PostsApp.Views.Post = Backbone.View.extend({
template: _.template($('#post-template').html()),
render: function(){
var newObject = this.model.toJSON();
$.ajax({
url:"/user",
success:function(result){
newObject.twittername = result.name; ;
}
});
this.$el.html(this.template(newObject));
}
});
我想我可以把它。$ el.html(this.template(newObject));在回调中,但是“这意味着什么呢?有人能想到解决这个问题吗?
。”或者在渲染函数中发送这样的请求是完全非常糟糕的。
答案 0 :(得分:6)
你的假设是正确的。它无法正确呈现。
就像the more general case一样,您可以在success
回调中执行实际渲染。
render: function(){
var newObject = this.model.toJSON();
var that = this; // to fix that `this` refers to in the callback
$.ajax({
url:"/user",
success:function(result){
newObject.twittername = result.name; ;
that.$el.html(that.template(newObject));
}
});
}
我要做的是:
.fetch
change
个事件,并在此类事件上调用渲染。这是因为视图不应该负责更改Backbone中的模型数据。它混合了商业逻辑"有了演示文稿,它可以很快变得丑陋。
[我认为这个例子2来自Addy Osmani" Backbone Fundamentals"应该让你大致了解这种结构是如何布局的。