【问题标题】:Backbone.Models#save callbacks are not being triggeredBackbone.Models#save 回调没有被触发
【发布时间】: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


    【解决方案1】:

    尝试删除成功和错误函数周围的额外括号,即:

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

    【讨论】:

    • 您还必须指定要保存的内容,尝试将空对象文字作为保存调用的第一个参数,即 JobStatuses.save( 到 JobStatuses.save({},
    • 啊,我知道我错过了什么。谢谢,那行得通。如果你这样回答我可以接受。
    猜你喜欢
    • 1970-01-01
    • 2023-02-12
    • 1970-01-01
    • 1970-01-01
    • 2019-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多