Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/460.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/4/json/13.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/3/xpath/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
Javascript主干;模型与集合不同?_Javascript_Json_Backbone.js - Fatal编程技术网

Javascript主干;模型与集合不同?

Javascript主干;模型与集合不同?,javascript,json,backbone.js,Javascript,Json,Backbone.js,对javascript和主干相对较新。当我从集合中填充模型时,它工作正常。但是,当我尝试获取单个模型元素时,得到的格式与我的模型不匹配。我该怎么纠正呢 在url/task上执行GET操作时,我得到以下JSON,并且能够填充集合: { "tasks": [ { "id": 8361261004, "task": "test 1" }, { "id": 3916252773, "task": "jhgjhg" },

对javascript和主干相对较新。当我从集合中填充模型时,它工作正常。但是,当我尝试获取单个模型元素时,得到的格式与我的模型不匹配。我该怎么纠正呢

在url/task上执行GET操作时,我得到以下JSON,并且能够填充集合:

{
  "tasks": [
    {
      "id": 8361261004,
      "task": "test 1"
    },
    {
      "id": 3916252773,
      "task": "jhgjhg"
    },
    {
      "id": 1390322898,
      "task": "erterte"
    }
  ]
}
当我在单个模型元素上执行提取时,我会得到以下格式,它不适合模型:

{
  "task": {
    "id": 8361261004,
    "task": "test 1"
  }
}
因此,我尝试使用以下方法解析模型:

'parse': function( apiResponse ){
    return apiResponse.task;
}
但当我这么做的时候,收藏就不再匹配了

怎么了

代码如下:

$.fn.serializeObject = function() {
    var o = {};
    var a = this.serializeArray();
    $.each(a, function() {
        var ref = this.name;
        if(o[ref] !==undefined) {
            if(!o[ref].push) {
                o[ref] = [o[this.name]];
            }
            o[ref].push(this.value || '');
        }
        else {
            o[ref] = this.value || '';
        }
    });
    return o;
};

var Task = Backbone.Model.extend({
    'urlRoot': 'http://localhost:5000/tasks',

    'defaults': {
        id: null,
        task: 'default'
    }
});

var Tasks = Backbone.Collection.extend({
    'url': 'http://localhost:5000/tasks',
    'model': Task,

    'initialize': function(){
        //alert("Welcome to this world");
    },

    'parse': function( apiResponse ){
        return apiResponse.tasks;
    }
});

var TaskListView = Backbone.View.extend({
    'el': '.page',
    'template': _.template($('#task-list-template').html()),

    'render': function() {
        var that = this;
        var tasks = new Tasks();

        tasks.fetch( {
            success: function() {
                that.$el.html( that.template( { 'tasks': tasks } ) );
            }
        })
    }
});

var TaskEditView = Backbone.View.extend({
    'el': '.page',
    'template': _.template($('#task-edit-template').html()),

    'render': function(options) {
        if(options.id) {
            var that = this;
            var existingTask = new Task({id: options.id});
            console.log("existingTask");
            console.log(existingTask);
            existingTask.fetch({
                success: function(gotObject) {
                    console.log(existingTask.toJSON());
                    console.log("existing task id = " + existingTask.task.id);
                    console.log("existing task task = " + existingTask.task.task);
                    that.$el.html( that.template( { task: existingTask.task } ) );
                }
            });
        }
        else {
            var task = new Task();
            this.$el.html( this.template( { task: null } ) );
        }
    },

    'events': {
        'submit .edit-task-form': 'saveTask'
    },

    saveTask: function(ev) {

        var taskDetails = $(ev.currentTarget).serializeObject();
        var task = new Task;
        console.log(taskDetails);
        task.save(taskDetails, {
            success: function(task) {
                router.navigate('', {trigger: true});
            },
            error: function(model, response) {
                var responseObj = $.parseJSON(response.responseText);
                console.log('Type: ' + responseObj.error + ' Message: ' + responseObj.message);
            }
        });
        return false;
    }
});

var Router = Backbone.Router.extend({
    routes: {
        '' : 'home', // intentionally blank for the home page
        'new' : 'editTask',
        'edit/:id' : 'editTask'
    }
});

// Display logic
var taskListView = new TaskListView({ });
var taskEditView = new TaskEditView({ });
var router = new Router();

router.on('route:home', function() {
    taskListView.render();
});

router.on('route:editTask', function(id) {
    taskEditView.render({id: id});
});

Backbone.history.start();
非常感谢你的帮助


David

可能会这样修改您的解析:

'parse': function( apiResponse ){
    if( _.isArray(apiResponse) ) return apiResponse;
       return apiResponse.task;
}

尝试从服务器端更新返回的一致性!collection是一个模型数组,但不是在您的示例中:
var col=[{},{}];var mod={}