2014-02-25 84 views
0

我有一个小的Backbone/Express应用程序,我想偶尔同步一个名为JobStatuses的模型。骨干文档指出:Backbone.Models#保存回调没有被触发

保存接受的选项哈希,这 将被传递的参数(模型,响应选项),成功和错误回调。如果 服务器端验证失败,则返回非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

尝试删除在你的成功和错误的功能额外的括号,即:

success: (() -> 
     console.log('statuses') 
     console.log(JobStatuses.attributes)), 

success:() -> 
     console.log('statuses') 
     console.log(JobStatuses.attributes) 

它也像问题是您的保存电话,因为您必须指定要保存的内容。如果你只是想更新基于其模型的当前变化的状态,然后调用保存一个空的对象字面像这样:

JobStatuses.save({}, 

或者你可以只用属性更改为添加行保存调用像这样:

JobStatuses.save(
    category: job: 'completed' 
, 
    success:() -> 
+0

只是想你的建议......没有区别:( – user886596

+0

你还必须指定要保存的,尝试抛出一个空对象文本作为保存调用即JobStatuses.save(以JobStatuses的第一个参数。保存({}, –

+0

啊,我知道我错过了一些东西。谢谢,这很有效。如果你做出答案我可以接受。 – user886596