Backbone.Models #save callbacks没有被触发

时间:2014-02-25 17:11:40

标签: javascript backbone.js express coffeescript

我有一个小型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));
};

1 个答案:

答案 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: () ->