【发布时间】:2014-03-28 02:20:42
【问题描述】:
我有一个小型 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));
};
【问题讨论】:
标签: javascript backbone.js express coffeescript