Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/72.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
Jquery Backbone.js-使用parse方法扩展模型(在集合中),但不获取更新的集合_Jquery_Backbone.js_Backbone Views_Backbone.js Collections - Fatal编程技术网

Jquery Backbone.js-使用parse方法扩展模型(在集合中),但不获取更新的集合

Jquery Backbone.js-使用parse方法扩展模型(在集合中),但不获取更新的集合,jquery,backbone.js,backbone-views,backbone.js-collections,Jquery,Backbone.js,Backbone Views,Backbone.js Collections,在我的应用程序中,我有多个页面,我确实有一个普通模型,从普通模型开始,我使用集合的parse方法根据页面扩展更多的模型 这样做之后,我仍然没有得到返回的集合,而是只得到从后端检索的对象 myview代码: define([ "jquery", "backbone", "models/model", "collection/dashBoardcollection", "views/navi/naviView",

在我的应用程序中,我有多个页面,我确实有一个普通模型,从普通模型开始,我使用集合的
parse
方法根据页面扩展更多的模型

这样做之后,我仍然没有得到返回的集合,而是只得到从后端检索的对象

myview代码:

 define([
        "jquery",
        "backbone",
        "models/model",
        "collection/dashBoardcollection",
        "views/navi/naviView",
        "views/dashBoard/myTaskView",
        ],function ($,Backbone,model,collection,naviView,myTaskView) {

    var dashBoardView = Backbone.View.extend({
        el:$("div.contentwrapper"),
        events:{
            "click h2" : "tileleDispaly"
        },
        initialize:function(){
            this.$el.html(this.template);
            this.c = collection;
            this.listenTo(this.c, 'sync', this.logCollection);
            this.c.fetch();
        },
        logCollection:function(){
             console.log(this.c);
//not getting the collection shows array length as 1
            },
            tileleDispaly:function(e){
                var tittle = $(e.target).text();
                new myTaskView().showTitle(tittle);
            }
        });

    return dashBoardView;

})
我的收藏代码:

   define(["backbone","models/model"], function (Backbone,model) {

    var titleModel = model.extend({
        "title" : "no title assigned"
    })

    var slideModel = model.extend({
        "slide" : "no title assigned"
    })

    var rowModel = model.extend({
        "title" : "no title assigned",
        "text"  : "no text",
        "date"  : "define date"
    })

    var optionModel = model.extend({
        "show" : "no title assigned"
    })

    var dashBoardCollection = Backbone.Collection.extend({
        url:"js/dashBoard.json",
        model:model,
        initialize:function(model,options){

        },
        parse:function(response){

            var that = this;

                var x = [];
// update 1. pushing all models to x array

            _.each(response.DashBoard, function(obj){

                if(obj.hasOwnProperty("title")){

                    x.push(new titleModel(obj));

                }else if (obj.hasOwnProperty("widget")){

                    _.each(obj.widget, function(m){
                        x.push(new slideModel(obj));
                    })

                }else if (obj.hasOwnProperty("activity")){

                    _.each(obj.activity, function(va){

                        if(va.hasOwnProperty("rows")){

                            _.each(va.rows, function(row){
                                x.push(new rowModel(row));
                            })

                        }else if (va.hasOwnProperty("option")){

                            _.each(va.option, function(option){
                                x.push(new optionModel(option));
                            })

                        }

                    })

                }

            })

            this.add(x);
//update 2. adding the models to collection

                console.log(this);
// console works fine shows the array length as 12.

                return this;
//returning to view.. 

            }
        });

    return new dashBoardCollection;

})

但是我的观点没有带来任何模型。。从集合中,这里出了什么问题。。?还是我的方法错了?有人帮我整理这个问题吗?

这是因为“完成”中的响应不是集合。它只是响应中的一个对象

日志c是一个更新的集合

c.done(function(data){
    console.log(c); //Will be the updated collection
})
此外,与使用承诺的方法相比,倾听事件是一种更干净的方法

initialize: function() {
       this.$el.html(this.template);
       this.c = collection;
       this.listenTo(this.c, 'sync', this.logCollection);

       this.c.fetch(); //fetching the data
},
logCollection: function() {
    console.log(this.c); // This will log the collection
}

嗨,苏珊斯,我更新了我的问题,但我还是有问题。在集合部分,我获取所有模型,但在视图部分(获取后),我没有获取模型。。查看部分如何不能正确地获取数据..你能发布一个从服务器得到的响应的小样本吗?我正在使用json文件。。当我在集合中使用console时,我得到的是长度,但不是视图中的长度。。还是让我把我所有的代码都放进去摆弄和更新你,以达到我更新到JSFIDLE的目的。。这是当我在收集中获得没有任何问题的模型时的链接,我仍然需要提供id吗?让我们试试看。但据我所知,问题在于view未正确收到收集结果。。