我已经在服务器上fetch()了一个模型,我想用视图呈现fetch()的结果。
fetch()的结果是一个对象数组(var risultati),我想呈现这个var risultati。我试过了,但都不管用。
var AppRouter = Backbone.Router.extend({
routes: {
"": "list",
},
initialize: function () {},
list: function () {
var utente = new Person();
var risultati;
utente.fetch({
success: function (data) {
var ris = data.attributes;
var risultati = ris.results;
console.log(risultati); /* risultati contains array of object to render*/
}
});
this.page = new UserListView({
model: this.utente
});
$('body').append(this.page.$el);
}
});发布于 2012-07-19 23:42:49
您可能会遇到问题,因为呈现视图的调用与utente.fetch()调用是分开进行的。
由于.fetch()是异步的,您的视图代码将在.fetch()完成之前执行。您应该将视图创建/呈现添加为成功函数的一部分,或者您应该绑定更新模型时发生的更改事件,以触发包含视图创建的新函数。
发布于 2012-07-19 23:45:25
你应该分离你的MVC逻辑...不要将对象(我认为是集合)附加到路由器路由处理程序。
假设您正在尝试呈现person模型的集合,我建议您使用person的模型和视图,以及用于处理“对象数组”的集合和视图:
var Person = Backbone.Model.extend({
initialize : function(){
// initialize the view
this.view = new PersonView({model : this});
}
}),
PersonView = Backbonke.View.extend({
render : function(){
// render your person
}
}),
UserList = Backbone.Collection.extend({
model : Person,
initialize : function(){
this.view = new UserListView({
collection : this
});
},
update : function(){
var self = this;
this.fetch({
success: function (data) {
var ris = data.attributes;
var risultati = ris.results;
console.log(risultati); /* risultati contains array of object to render*/ self.view.render();
}
});
}
}),
UserListView = Backbone.View.extend({
render : function(){
this.collection.each(function(el,i){
el.view.render();
});
}
});然后将其用作:
var page = new UserList();
var AppRouter = Backbone.Router.extend({
routes: {
"": "list",
},
initialize: function () {},
list: function () {
page.update();
}
});希望这能有所帮助!
https://stackoverflow.com/questions/11563887
复制相似问题