Javascript 未设置主干视图属性

Javascript 未设置主干视图属性,javascript,backbone.js,Javascript,Backbone.js,我有一个视图,其中有一个属性,我想在发出获取请求时更新它的值 define(['underscore','backbone','models/taskCollection'], function( _,Backbone,TaskCollection) { var UserTasksView = Backbone.View.extend({ el:"#user-task-list",

我有一个视图,其中有一个属性,我想在发出获取请求时更新它的值

    define(['underscore','backbone','models/taskCollection'],
            function( _,Backbone,TaskCollection) {
            var UserTasksView = Backbone.View.extend({
                el:"#user-task-list",
                cur_task: undefined,
                initialize: function() {
                    this.collection = new TaskCollection;
                    this.model = this.collection._model;

                    _.bindAll(this,'render');
                    this.collection.bind('reset',this.render);
                },
view_task: function( event ) {

                var el = $(event.currentTarget);
                var task_id = el.attr('data-taskid');
                var row = el.parents('td').parents('tr.task-row');

                row.addClass("active");

                el.hide();
                el.next('a').show();

                var task = this.collection.fetch({
                    data: {id:task_id},
                    silent:true,
                    success:this._task_fetch_success
                });

                this._show_task_detail();

                event.preventDefault();
            },

            _task_fetch_success: function(response,status,xhr) {
                this.cur_task = JSON.stringify(status);
                return status;
            },

            /**
            * Displays the details of a task
            **/
            _show_task_detail: function() {
                var main = $('.app-content');
                var detail_view = $('.app-extra');
                var task_detail_view = $("#task-detail-view");

                //Reduce task list view width
                main.animate({
                    "width":"50%"
                },2000);
                //Display app extra bar
                detail_view.show();
                //show task detail  view
                detail_view.children('active-page').hide().removeClass('active-page').addClass('inactive-page');
                task_detail_view.show().removeClass('inactive-page').addClass('active-page');
                console.log(this.cur_task);
                var template = ich.task_detail(this.cur_task)
                $('div.task-details').html(template);
            }
fetch触发的ajax请求成功并执行成功回调,但当我尝试记录“cur_task”属性时,它显示为未定义;
我做错了什么

你有几个问题就从这里开始:

var task = this.collection.fetch({
    data: {id:task_id},
    silent:true,
    success:this._task_fetch_success
});
在这里:

_task_fetch_success: function(response,status,xhr) {
    this.cur_task = JSON.stringify(status);
    return status;
}
首先,
success
回调不是jQuery success回调,不接收通常的jQuery参数;从:

选项
哈希将
成功
错误
回调作为参数传递给
(收集、响应)

因此,您的
\u task\u fetch\u success
函数被称为
f(collection,response)
而不是您期望的
f(response,status,xhr)
;这就是为什么必须将
状态
参数视为JSON:
状态
实际上是
响应

您的下一个问题是
不是您认为的
\u task\u fetch\u success
函数中的内容。主干网络:

  var success = options.success;
  options.success = function(resp, status, xhr) {
    collection[options.add ? 'add' : 'reset'](collection.parse(resp, xhr), options);
    if (success) success(collection, resp, options); // <--------------- Right here
    collection.trigger('sync', collection, resp, options);
  };
initialize: function() {
    //...
    _.bindAll(this, 'render', '_task_fetch_success');
    //...
}