【问题标题】:backbone collection fetch subtitute $.ajax骨干集合获取替代$ .ajax
【发布时间】:2012-03-13 00:43:20
【问题描述】:

我正在尝试理解主干代码。我读了这个 http://addyosmani.com/blog/building-spas-jquerys-best-friends/

那我打算改一下

    if (this._index === null){
        $.ajax({
            url: 'data/blog.json',
            dataType: 'json',
            data: {},
            success: function(data) {
                ws._data = data;
                console.log(ws._data);
                ws._blogs = new BlogCollection(data.rows);
                console.log(ws._blogs);
                ws._index = new IndexView({model: ws._blogs}); 
                Backbone.history.loadUrl();
            }
        });
        return this;
    }
    return this;

使用集合获取

    if (this._index === null){
        ws._data = new BlogCollection;
        ws._data.fetch({success: function(data){console.log(data.models[0].attributes);}});


        //ws._blogs = new BlogCollection(ws._data.rows);
        //ws._index = new IndexView({model: ws._blogs});
        Backbone.history.loadUrl();

    }

这个系列

var BlogCollection = Backbone.Collection.extend({ 型号:博客, 网址:'数据/blog.json', 解析:函数(响应){ 返回响应; }

当我从集合中读取响应时,它给出的值与使用 jquery ajax 相同。 但是当我在控制器中使用 fetch 时,为什么我必须访问 data.models[0].attributes);得到相同的数据返回。

这是我的 json

{ "page":"1", "total": "5", "records": "25", "rows": [ { "title": "经典流行音乐", “作者”:“迈克尔杰克逊收藏”, “图像”:“图像/1.jpg”, “标签”:[“xyz”,“abc”,“def”], “蛞蝓”:“经典流行”, "url": "http://www.localhost/news", “介绍”:“你好测试”, “内容”:“你好测试,alfjldsajfldjsflja dljfldasjfa jfljdasfl jfldsjf jljdafl jl” }, { "title": "现代流行/R&B", “作者”:“布鲁诺·马尔斯等人”, “图像”:“图像/54.jpg”, “标签”:[“测试”,“测试2”,“测试3”], “蛞蝓”:“现代流行音乐-rb”, "url": "http://www.localhost/news", “介绍”:“你好测试 2”, “内容”:“你好测试,alfjldsajfldjsflja dljfldasjfa jfljdasfl jfldsjf jljdafl jl” } ] }

如何使 fetch 正常工作??

【问题讨论】:

    标签: backbone.js


    【解决方案1】:

    在扩展您的 Backbone 集合时,您应该定义一个 parse 函数,该函数返回代表集合中包含的模型的行数组

    在您的情况下,它必须是一个数据数组,数组中的每个对象都代表您的Blog 模型,因此您需要返回rows 属性:

    var BlogCollection = Backbone.Collection.extend({ 
        model: Blog, 
        url : 'data/blog.json', 
        parse: function(response){ 
            return response.rows; 
        }
    });
    

    那么如果你的模型有一个parse函数,它将获取数组中包含的每个对象的数据,以防你需要在模型属性设置之前对数据做任何事情:

    var Blog = Backbone.Model.extend({
    
        //data will contain one of the items returned from the collection's 'parse' function. 
        parse: function(data){
            return data;    
        }
    });
    

    这将确保 Backbone 集合将正确地创建并使用数据填充集合中表示的模型。

    您可能还想公开集合中的其他元数据 (page, total, records),也许使用的属性也是 page/total/records 的 Backbone.Model

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多