Backbone - 无法遍历对象属性

时间:2014-01-20 19:36:54

标签: json backbone.js collections model fetch

我正在尝试遍历json文件的属性。您可以在http://jsfiddle.net/gerlstar/qRV7k/中查看我的代码。在第38行,它应该在控制台中返回“name”和“age”的值。谁知道我做错了什么?

    var app = {};

     app.model2 = Backbone.Model.extend({
      defaults: {
        age: '',
        name: ''
       }
      });

    app.collec = Backbone.Collection.extend({
    model: app.model2,
    url: 'http://echo.jsontest.com/name/betty/age/22',
    parse: function (response) {
        return response;
    },
    initialize: function () {
        console.info("init ...");
        this.fetch({
            success: function (obj, s, jqxhr) {
                // console.log(s);
            },
            error: function (funds) {
                console.error("Error in fetch in collec");
            }
        });
    }
});

app.model_with_collec = Backbone.Model.extend({
    initialize: function(){
        //console.info(this);
        this.set({
            my_kids: new app.collec()
        });

        var mo = this.get('my_kids').models;
       console.log(mo);
        console.log(mo.attributes);//undefined is returned

    }

});

new app.model_with_collec();

1 个答案:

答案 0 :(得分:0)

如果您运行这样的代码,它将按顺序执行,并在服务器响应其余调用之前到达console.log。所以它打印未定义是正常的。

这里将打印您想要的代码:

<!DOCTYPE html>
<html>
<head>
    <script src="jquery.js"></script>
    <script src="underscore.js"></script>
    <script src="backbone.js"></script>
    <!-- /inladen bower_components -->
    <script>
        var app = {};

        app.model2 = Backbone.Model.extend({
            defaults: {
                age: '',
                name: ''
            }
        });

        app.collec = Backbone.Collection.extend({
            model: app.model2,
            url: 'http://echo.jsontest.com/name/betty/age/22',
            parse: function(response) {
                return response;
            },
            initialize: function() {
                console.info("init ...");
                this.fetch({
                    success: function(obj, s, jqxhr) {
                        // console.log(s);
                    },
                    error: function(funds) {
                        console.error("Error in fetch in collec");
                    }
                });
            }
        });

        app.model_with_collec = Backbone.Model.extend({
            initialize: function() {
                //console.info(this);
                this.set({
                    my_kids: new app.collec()
                });

                this.get('my_kids').bind('reset', this.logAttributes, this);
            },

            logAttributes: function() {

                var mo = this.get('my_kids').models;

                console.log(mo);
                console.log(mo[0].attributes);
            }

        });

        new app.model_with_collec();
    </script>
</head>
</html>