我正在创建一个主干应用程序,尽管一切似乎都正常,但如果我继续使用这种方法添加功能和视图,我担心我可能需要很快重构。我在后端使用Parse,这意味着该对象Parse
等效于Backbone.Model
. 我无法控制我的模型,因为它们已经针对移动设备进行了优化,在这里我只需要显示 3 个不同模型的某些关键值。
虽然没有什么“错误”(它有效),但我开始犯“更大”的错误只是时间问题。
这是我的Router
:
App.Controllers.Documents = Backbone.Router.extend({
routes:{
"story/:id" : "fullStory",
"" : "index"
},
// ...
fullStory: function(id){
var self = this;
var query = new Parse.Query(Steps);
query.equalTo("story", id)
var steps = query.collection();
steps.fetch({
success: function() {
new App.Views.Steps({ collection: steps });
var title = new Story({ objectId: id });
title.fetch({
success: function(model, resp) {
new App.Views.Title({ model: title});
var idUser = title.toJSON().idUser;
var user = new Parse.User({ objectId: idUser });
user.fetch({
success: function(){
// I just need the username key here...
new App.Views.Username({model:user,el:$("#user")});
},
error: function(){
new Error({ message: 'Could not find the user you requested.' });
}
})
},
error: function() {
new Error({ message: 'Could not find that story.' });
}
})
},
error: function() {
new Error({ message: "Error loading story." });
}
});
}
鉴于在Parse中创建对象的方式,我需要访问 3 个不同的对象,这就是我渲染View
“部分”的原因。我希望这个函数只在FullStory
View
其中呈现这些“子视图”,但我不确定如何做到这一点,因为Parse.Object
s 需要对另一个对象的引用->另一个对象的键var user = new Parse.User({ objectId: idUser });
在哪里。idUser
最后我的Views
:
App.Views.Steps = Backbone.View.extend({
tagName : "ul",
className: "steps",
initialize: function() {
this.render();
},
render: function() {
this.$el.html(_.template($("#story_steps").html())({ collection: this.collection }));
$('#steps_wrapper').html(this.el);
},
});
App.Views.Title = Backbone.View.extend({
initialize: function() {
this.render();
},
render: function() {
this.$el.html(_.template($("#story_title").html())({ model: this.model }));
$('#title').html(this.el);
}
});
App.Views.Username = Backbone.View.extend({
initialize: function() {
this.render();
},
template: _.template('<%= name %>'),
render: function() {
this.$el.html(this.template(this.model.toJSON()));
}
});