Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Backbone.js 为什么我的模型没有定义?_Backbone.js_Coffeescript - Fatal编程技术网

Backbone.js 为什么我的模型没有定义?

Backbone.js 为什么我的模型没有定义?,backbone.js,coffeescript,Backbone.js,Coffeescript,我的模型有些问题。当我去保存状态时,我得到 未捕获的TypeError:无法调用未定义的方法“get” 有人有什么想法吗?我对主干网非常陌生,甚至对咖啡脚本也比较陌生 View = require 'views/base/view' module.exports= class TaskView extends View autoRender: true eventSounder:false taskRemoveTimeout:500 completeTask:(e)=>

我的模型有些问题。当我去保存状态时,我得到

未捕获的TypeError:无法调用未定义的方法“get”

有人有什么想法吗?我对主干网非常陌生,甚至对咖啡脚本也比较陌生

View = require 'views/base/view'
module.exports= class TaskView extends View
  autoRender: true
  eventSounder:false
  taskRemoveTimeout:500

  completeTask:(e)=>
    e.preventDefault() if e
    e.stopPropagation() if e
    @toggleStatus()
    @model.save {
      status: @model.get('status') # error
    }, {
      success: =>
        unless @removeTaskTimeout
          @removeTaskTimeout = setTimeout(@removeTaskItem, @taskRemoveTimeout)
    }

  toggleStatus: =>
    if @model.get('status') is 'OPEN'
      if @removeTaskTimeout
        clearTimeout @removeTaskTimeout
        @removeTaskTimeout = null
      @model.set('status', 'CLOSED')
    else if @model.get('status') is 'CLOSED'
      @model.set('status', 'OPEN')

  removeTaskItem: =>
    if @model.get('status') is 'CLOSED'
      @eventSounder = true
      @datastore.userTasks.remove @model
      @model?.collection?.remove @model
      console.log @model

  getTemplateData: =>
    td = super
    td.completeClass = "complete" if @model.isComplete?()
    td.assignedBy = @datastore.dimensionUsers.getUserName(@model.get('assigner'))
    if !td.assignedBy
      td.assignedBy = "Dimension User Not Found"
    td
更新:

以下是调用completeTask的事件的视图:

View = require 'views/base/task'
template = require 'views/templates/fanview/right/task_carousel_item'

module.exports = class TaskCarouselItem extends View
  template: template
  template = null
  className: 'item'

  listen:
    'change model' : 'render'
    'toggleStatus model' : 'completeTask'

  attach: ->
    super
    id = @model.id
    @$el.data('id', id)
    @publishEvent 'taskCarousel:status:update'

  initialize: ->
    super
    console.log 'Initialize', @model

我不太熟悉coffeescript语法,但它看起来像您的
@model.get('status')
没有使用正确的
this
。要解决此问题,请尝试使用以下方法(但将其转换为coffeescript):


相信我们找到了问题所在

当toggleStatus更改状态或其他内容时,模型上的其他位置可能有一个侦听器。当模型更改(特别是状态)时,它将被销毁。因此,当completeTask继续运行时,模型在该点上已被破坏


谢谢大家的帮助:)。

如果您需要更多信息,请告诉我。我不知道我在做什么:)@tieTYT-这里是这行:状态:@model.get('status')#error@muistooshort-我在我认为调用completeTask的地方添加了toggleStatus模型事件。是否需要在model.save后加括号?或者,您是否将模型传递给视图?如果我这样做,它似乎无法编译。
// Before @model.save
var status = this.model.get('status');
this.model.save ({
  status: status
});