将一部分JSON数据解析到Backbone视图

时间:2014-06-18 12:24:09

标签: javascript backbone.js model-view-controller

我对骨干很新,我试图在我的项目中集成骨干。我有一个很大的JSON文件,已在项目中使用过。我的views将主要由JSON文件中的数据驱动。

示例JSON看起来像这样。

{
    "Cases": [
        {
            "x": "Cat",
            "y": 12, 
        }
    ],
    "Summary": [
        {
            "date" : "18/06/2014",
            "data" :{
                "ALL" : [
                    "Items" : 0
                ],
                "Cat" : [
                    "Items" : 10
                ]
            }
        }
    ]
}

我的收藏品看起来像这样,我想在JSON中使用的是 Summary

define(['jquery', 'underscore', 'backbone'], function($, _, Backbone) {

    var DataModel = Backbone.Model.extend({});

    var DataCollection = Backbone.Collection.extend({
        model : DataModel,
        url : 'path/to/my/data.json',
        parse : function(response, xhr) {
            // I only want the Summary returned
            console.log(response.Summary); // Prints exactly what I need
            return response.Summary;
        }
    });

    return DataCollection;
});

我的观点看起来像这样

define(['jquery', 'underscore', 'backbone', '../../collections/DataCollection'], function($, _, Backbone, DataCollection) {

    var AppVIew = Backbone.View.extend({
        initialize : function() {
            var myData = new DataCollection();
            console.log(myData.fetch({}) );
        }
    });

    return AppVIew;
});

当我尝试打印所提取的内容时,我得到以下内容以及来自服务器的响应,以及" responseText"键入整个JSON而不是response.Summary

Object { readyState=1, setRequestHeader=function(), getAllResponseHeaders=function(), more...}


有人可以帮我解决如何解决我的这个问题。遇到了similar issue,但没有帮助。

任何帮助/建议将不胜感激,更进一步。

2 个答案:

答案 0 :(得分:0)

fetch返回一个XHR对象。您应该检查集合的数据,而不是fetch调用的返回值。

myData.fetch({
  success: function(collection, response, options) {
      console.log(collection.models);
  }
});

答案 1 :(得分:0)

行。 当骨干调用Fetch函数时,它从后面使用Jquery(ajax),这意味着fetch是Async。要接收获取申请的结果,您可以这样做。

coffeescript代码。     //在你的模特里面     result = @fetch()

Fetch返回jqXHR(很高兴了解您的请求),在这里您可以找到一些信息,如请求的状态代码等。

但是如果你想在请求之后知道模型/集合的属性,你需要监听在主干完成获取请求后将触发的事件。

//Inside your model
getResult:-> 
  @fetch(
     success:=>
        @trigger "success"
     error:=>
        @trigger "error"

//Inside your view
@model = new Model()
@model.getResult()
@model.on "succees", @doSomethingForSuccess, @
@model.on "error", @doSomethingForError, @


doSomethingForSuccess:->
 //implementation

doSomethingForError:->
 // implementation

现在,您可以使用服务器内容填充模型。如果您尝试在#34; doSomethingForSuccess"中进行console.log功能,您将看到内容信息。

Backbone在与服务器通信时有一些默认触发事件。 看看官方文档。 http://backbonejs.org/#Events