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');
//...
}