javascript - 主干模型 save() 方法不执行任何操作

标签 javascript ruby-on-rails backbone.js

我正在将 Backbone 与 Rails 结合使用,并尝试将新模型保存到服务器。但是,在模型上调用 .save() 似乎没有执行任何操作。查看 Chrome 中的“网络”选项卡,我没有看到任何请求。这是我的代码:

型号

class MyApp.Models.Chain extends Backbone.Model
    defaults:
        steps: []
        id: null

    urlRoot: '/chains'

    validate: (attrs) ->
        if $.trim(attrs.steps[@step_number - 1]) == ''
            return "Step can't be blank."

查看

class MyApp.Views.ChainsNew extends Backbone.View

    # @template is defined by a conditional inside render()
    initialize: ->
        @is_saving = false

    events:
        'click #btn-go': 'add_step'
        'click #btn-done': 'save'

    render: (step_number) ->
        @model.step_number = step_number

        @template = if @model.step_number is 1 then JST['chains/new'] else JST['chains/step']
        $(@el).html(@template({previous_step_text: @model.get('steps')[step_number - 2]}))

        @

    add_step: ->
        #divide array into arrays of steps before and after step being edited
        steps = @model.get('steps')
        array1 = steps.slice(0, @step_number - 1)
        array2 = steps.slice(@step_number)
        array1.push(@$el.find('textarea').val())
        newArray = array2.concat(array1)

        if !@model.set({steps: newArray}, {validate: true})
            alert(@model.validationError)
            false
        else
            true #need to a return a value for the `save` method

    save: ->
        @is_saving = true
        if @add_step
            @model.save(null, {
                success: ->
                    console.log(arguments)

                error: ->
                    console.log(arguments)
            })

我知道 @model.save 正在被调用,因为我已经在它之前将一条消息记录到控制台(换句话说,if @add_step 为 true)。

最佳答案

最有可能的是,您的模型未通过验证,这使得 save 返回 false 并且不进行 API 调用。尝试使用

class MyApp.Models.Chain extends Backbone.Model
    defaults:
        steps: []
        id: null

    urlRoot: '/chains'

    validate: (attrs) ->
        if $.trim(attrs.steps[@step_number - 1]) == ''
            console.log "Houston, we have a problem"
            return "Step can't be blank."

如果您在控制台中看到一条消息,则表明存在问题。您还可以尝试完全注释 validate 函数,并且在所有情况下都应该进行 API 调用。

关于javascript - 主干模型 save() 方法不执行任何操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21590329/

相关文章:

javascript - 使用 JavaScript 获取 SVG 中最近的元素

javascript - 替换响应表以获得更好的标记和可访问性

ruby-on-rails - 您将 Rails 应用程序放在服务器上的什么位置?你用什么用户部署?

javascript - Handlebars 未填满表格

javascript - 如何自定义谷歌地图标记的颜色、形状和大小

javascript - jQuery :not() selector does not work in . off() 方法

ruby-on-rails - Rails 参数错误 : invalid %-encoding

ruby-on-rails - Zeitwerk:将 engine/gem 目录添加到父 Rails 应用程序的自动加载路径

javascript - 要查看的主干传递值

javascript - HTML 文档中脚本标签的位置 - <head> 和 <body> 具有不同的行为