我试图围绕Backbone,更具体地说是一个应用程序如何在整个生命周期中流动。不幸的是,在我的工作中,我无法访问(或就此而言)我们的API的结构。我们有不同时期的不同来电,结构疯狂不一致。
覆盖提取或同步对于标准化返回并不是一个问题,但是我遇到的问题(在我在Backbone应用程序中潜入的最开始)是如何布局实际代码。
这是我的真实世界的例子。此页面非关键,我正在尝试使用Backbone重新编写它。这是流程:
我可以走得很远,但在某些时候我觉得代码被破坏了 - 或者感觉不自然。就像我在推进一样。
所以我的官方问题是:如何管理Backbone应用程序?
以下是我的过程摘要:
我创建了一个全局命名空间,应该
var App = App || {};
好的,让我们从主应用程序视图开始,如所有示例所示:
App.MainView = Backbone.View.extend({
//this loads the outer stuff
//and creates an instance of the Genre View
});
好吧非常简单,我需要一个流派模型,集合和视图(这也适用于子流派)
App.Genre = Backbone.Model.extend();
App.Genres = Backbone.Collection.extend({
url: 'returns a list of genres',
model: App.Genre,
initialize: function() {
this.fetch();
},
fetch: function() {
var self = this;
$.ajax({
url: this.url,
success: function(response) {
**format return**
self.add(formattedArrayOfModels);
}
});
}
});
现在进入视图,令人困惑的部分
App.GenreView = Backbone.View.extend({
el: 'element',//easy enough
tmpl: 'my handlebars template',//implementing handlebars...no problem
initialize: function() {
//this produces a collection full of genres
this.genreList = new App.Genres();
this.genreList.on('add', _.bind(this.render, this));
},
render: function() {
//rendering not a problem, pretty straight forward
}
});
直到这里我没有问题。类型列表加载,我们很高兴。所以,现在当用户点击一个类型时我希望它加载一个子类型
events: {
'click a': 'getSubGenres'
},
getSubGenres: function(e) {
}
这是我的问题。在 getSubGenres 中,我是否将其保留在本地?
var subGenre = new App.SubGenreView();
或者我应该将其作为流派观点的一部分吗?
this.subGenre = new App.SubGenreView();
我应该以某种方式将它放在父对象中,以便其他视图可以访问它吗?我如何控制这样的事情?
如果我已经有一个子类型的集合,我如何使用加载的集合(而不是另一个ajax调用)。
这是你要使用的方法吗?
答案 0 :(得分:1)
error:function(){}
和success:function(){}
,但这是假设URL设置正确。
第二:在我的主干键盘头部战斗中帮助了我很多的一件事就是addy osmani Backbone Fundamentals,其中包含一个非常丰富的pdf格式的教程。
现在回到这个问题:根据我的经验,你将主要需要'这个',所以习惯它是一个很好的习惯,如果正确实施,有一些东西可以解决很多这些问题:{{3 }}
无论如何,决定放置子视图的位置,完全取决于您的设计决策,并且很大程度上取决于您如何构建页面和文件。
关于如何使用预加载的“集合”:我真的没有得到它,因为你所谈论的集合包含所有子类,所以通常它不应该改变,即使视图变为a某种类型的视图,你仍然可以使用它。
但我所说的一切,都与你如何构建你的文件有关,我做了一个app.js和一个router.js以及很多其他文件,但主要的工作总是在主要的两个,所以基本上我总是获取所有内容。
我希望这能回答你的问题