【问题标题】:Why is my model undefined?为什么我的模型未定义?
【发布时间】:2013-10-01 15:37:15
【问题描述】:

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

未捕获的类型错误:无法调用未定义的方法 'get'

有人有什么想法吗?我是 Backbone 的超级新手,甚至是 Coffeescript 的新手。

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

【问题讨论】:

  • 如果您需要更多信息,请告诉我。我不知道我在做什么:)。
  • @tieTYT - 这里是这一行:status: @model.get('status') #error
  • @muistooshort - 我在我认为调用 completeTask 的地方添加了 toggleStatus 模型事件。

标签: backbone.js coffeescript


【解决方案1】:

我对coffeescript 语法不是很熟悉,但您的@model.get('status') 似乎没有使用正确的this。要解决此问题,请尝试使用以下内容(但将其转换为咖啡脚本):

// Before @model.save
var status = this.model.get('status');
this.model.save ({
  status: status
});

【讨论】:

  • model.save后面需要括号吗?或者,您是否将模型传递给您的视图?
  • 如果我这样做,它似乎无法编译。
【解决方案2】:

相信我们找到了问题所在。

当 toggleStatus 改变状态或其他什么时,模型上的其他地方可能有一个监听器。当模型发生变化(特别是状态)时,它会被销毁。因此,当 completeTask 继续时,模型此时已被销毁。

谢谢大家的帮助:)。

【讨论】:

    猜你喜欢
    • 2013-01-10
    • 2015-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-11
    • 1970-01-01
    • 1970-01-01
    • 2019-01-01
    相关资源
    最近更新 更多