Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JSON.stringify()和backbone.js中的集合_Backbone.js - Fatal编程技术网

JSON.stringify()和backbone.js中的集合

JSON.stringify()和backbone.js中的集合,backbone.js,Backbone.js,有人能解释一下,JSON.stringify()如何神奇地仅将通过URL获取的JSON字符串化,而不必处理完整集合对象的其他主干特定部分吗 我对解释这种令人印象深刻的功能的底层实现和/或设计模式感到好奇。我必须使用json2.js来获得stringify功能,所以我认为主干网不会覆盖或修饰stringify 我发现,如果我将集合直接传递给JS对象代码,代码会“看到”模型键和集合对象的其他主干特定部分,而如果我在该字符串化对象上执行JSON.stringify,然后执行jquery.parseJS

有人能解释一下,JSON.stringify()如何神奇地仅将通过URL获取的JSON字符串化,而不必处理完整集合对象的其他主干特定部分吗

我对解释这种令人印象深刻的功能的底层实现和/或设计模式感到好奇。我必须使用json2.js来获得stringify功能,所以我认为主干网不会覆盖或修饰stringify

我发现,如果我将集合直接传递给JS对象代码,代码会“看到”模型键和集合对象的其他主干特定部分,而如果我在该字符串化对象上执行JSON.stringify,然后执行jquery.parseJSON,我的代码只会“看到”URL返回的JSON

代码:


这是
JSON.Stringify
的预期和设计行为。来自Douglas Crockford的JSON2.js文件:

当找到一个对象值时,如果该对象包含一个toJSON方法,则将调用其toJSON方法并将结果字符串化

在主干.Collection上调用JSON.stringify时,它将调用该集合的
toJSON
方法,如下面的注释所述

enter code here

$(function () {
    var Person = Backbone.Model.extend({
        initialize: function () {
            // alert("Model Init");
        }
    }),
    PersonList = Backbone.Collection.extend({
        model: Person,
        url: '/Tfount_Email/Email/SOAInbox',
        initialize: function () {
            // alert("Collections Init");
        }
    }),
    personlist = new PersonList();

    personlist.fetch({
        error: function () {
            alert("Error fetching data");
        },
        success: function () {
            // alert("no error");
        }
    }).complete(function () {

    // first call to makeTable w collection obj, we see MORE than just the JSON returned by URL
        makeTable(personlist);      

    // stringify then parse, we see only JSON returned by URL
        jsonString = JSON.stringify(personlist);
        var plistJSON = jQuery.parseJSON(jsonString);
        makeTable(plistJSON);
    });
});

function makeTable(obj) {

    var type = typeof obj
    if (type == "object") {
        for (var key in obj) {
            alert("key: " + key)
            makeTable(obj[key])
        }
    } else {
        alert(obj)
    }

}