我已经获得了一个完全用Backbone.js编写的项目,我应该根据我们的具体需求进行更改。过去两周我一直在研究Backbone.js。我根据需要更改了基本的框架UI和一些功能。但是,我试图了解代码的流程,以便我可以进行进一步的更改。
具体来说,我正在尝试在Youtube上搜索一些内容。我有一个控制器,它使用一个集合来指定url和解析并返回响应。代码是巨大的,我得到回应后迷路了。我试图查看视图,但它只有一个div元素集。有人可以帮助我继续我不能在这里分享代码,但是关于在哪里研究的一般概念可能是有用的。
define([
'models/youtubeModelForSearch',
'coretv/config',
'libs/temp/pagedcollection',
'coretv/coretv'
],function( youtubeModelForSearch, Config, PagedCollection, CoreTV ) {
"use strict";
return PagedCollection.extend({
model: youtubeModelForSearch,
initialize: function() {
this.url = 'http://gdata.youtube.com/feeds/api/videos/?v=2&alt=json&max-results=20';
},
fetch: function(options) {
if (options === undefined) options = {};
if (options.data === undefined) options.data = {};
//options.data.cmdc = Config.getCMDCHost();
//CoreTV.applyAccessToken(options);
PagedCollection.prototype.fetch.call(this, options);
},
parse: function(response) {
var temp = response.feed
/*temp["total"] = 20;
temp["start"] = 0;
temp["count"] = 10; */
console.log(temp);
return temp.entry;
},
inputChangeFetch: function(query) {
this.resetAll();
if(query) {
this.options.data.q = query;
// this.options.data.region = Config.api.region;
//this.options.data.catalogueId = Config.api.catalogueId;
this.setPosition(0);
}
}
});
});
答案 0 :(得分:1)
假设您的集合端点已正确设置并正常工作。如果要从服务器获取数据,可以在集合上调用.fetch()
。
执行此操作时,会触发request
事件。您的观点或任何其他人都可以听取它以执行任何操作。
当数据从服务器到达时,您的parse
功能会被调用,使用set
或reset
进行设置,具体取决于您在fetch()
传递的选项。这将触发与set
/ reset
相关的任何事件(请参阅文档)。在set
/ reset
期间,将使用parse
解析从您的服务器检索到的数据(您可以跳过它,传递{ parse: false }
。
在此之后,如果您将任何成功回调传递给fetch
,则会以(collection, response, options)
作为参数进行调用。
最后,它会触发sync
事件。
如果您的服务器没有响应,它将触发error
事件,而不是所有这一切。
希望,我帮助了。