了解BackboneJS流程

时间:2014-04-11 19:24:09

标签: backbone.js

我已经获得了一个完全用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);
            }
        }
    });
});

1 个答案:

答案 0 :(得分:1)

假设您的集合端点已正确设置并正常工作。如果要从服务器获取数据,可以在集合上调用.fetch()

执行此操作时,会触发request事件。您的观点或任何其他人都可以听取它以执行任何操作。

当数据从服务器到达时,您的parse功能会被调用,使用setreset进行设置,具体取决于您在fetch()传递的选项。这将触发与set / reset相关的任何事件(请参阅文档)。在set / reset期间,将使用parse解析从您的服务器检索到的数据(您可以跳过它,传递{ parse: false }

在此之后,如果您将任何成功回调传递给fetch,则会以(collection, response, options)作为参数进行调用。

最后,它会触发sync事件。

如果您的服务器没有响应,它将触发error事件,而不是所有这一切。

希望,我帮助了。

相关问题