我有一个小型Backbone
/ Express
应用,其中有一个名为JobStatuses
的模型,我偶尔会同步。 Backbone文档声明:
save接受选项哈希中的成功和错误回调 将传递参数(模型,响应,选项)。如果一个 服务器端验证失败,返回非200 HTTP响应代码, 以及文本或JSON中的错误响应。
但是,当我调用JobStatuses.save
时,我从控制台看到,尽管服务器返回状态200,但我的success
/ failure
回拨未被触发。这是我的视图,模型和具有服务器端处理程序功能的路径的代码。 updateJobs
是被调用的函数。为什么我的JobStatuses.save
回调没有被触发?
这是调用JobStatuses.save
的视图。我可以确认这里调用了render
函数。
reqs = ['jquery', 'backbone', 'underscore', '../models/jobstatuses']
define(reqs, ($, Backbone, _, JobStatuses)->
class ButtonView extends Backbone.View
el: $('.button-container'),
template: _.template($('#button-template').html())
constructor: ()->
this.listenTo(JobStatuses, 'sync', this.render)
this.listenTo(JobStatuses, 'save', this.render)
JobStatuses.fetch()
render: ()->
this.el.html(this.template(jobStatuses: JobStatuses.attributes))
this.buttons = this.el.find('.job-button')
this.buttons.click(()->
category = $(this).attr('category')
job = $(this).attr('job')
JobStatuses.attributes[category][job] = 'Completed'
JobStatuses.save(
success: (() ->
console.log('statuses')
console.log(JobStatuses.attributes)),
error: (()->
console.log('failure'))
)
)
)
JobStatuses
型号:
define(['backbone'], (Backbone)->
class JobStatuses extends Backbone.Model
url: '/jobs'
new JobStatuses
)
我的路线。 updateJobs
是唯一一个在此处被调用的人:
/*
* GET home page.
*/
var RUNNING = 'Running';
var COMPLETED = 'Completed';
var BLOCKED = 'Blocked';
var NOT_STARTED = 'Not started';
var jobs = {
'oon': {
'oonload': NOT_STARTED,
'oonstagecopy': NOT_STARTED
},
'icd': {
'icdload': NOT_STARTED,
'icdstagecopy': NOT_STARTED
}
}
exports.index = function(req, res){
res.render('index', { title: 'Backbonejs Batchstart' });
};
exports.getJobs = function(req, res){
//res.setHeader('Content-Type', 'application/json');
res.send(JSON.stringify(jobs));
};
exports.updateJobs = function(req, res){
jobs = req.body;
console.log(req.body);
console.log(jobs);
res.send(JSON.stringify(jobs));
};
答案 0 :(得分:0)
尝试删除成功和错误函数周围的额外括号,即:
success: (() ->
console.log('statuses')
console.log(JobStatuses.attributes)),
到
success: () ->
console.log('statuses')
console.log(JobStatuses.attributes)
看起来问题是您的保存呼叫,因为您必须指定要保存的内容。如果你只想根据它的当前更改状态更新模型,那么使用空对象文字调用save,如下所示:
JobStatuses.save({},
或者你可以将带有属性更改的行添加到保存调用中,如下所示:
JobStatuses.save(
category: job: 'completed'
,
success: () ->