我的模型有些麻烦。当我去保存状态时,我得到了
未捕获的TypeError:无法调用未定义的方法'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
答案 0 :(得分:0)
我对coffeescript语法不是很熟悉,但看起来@model.get('status')
没有使用正确的this
。要解决此问题,请尝试使用以下内容(但将其转换为coffeescript):
// Before @model.save
var status = this.model.get('status');
this.model.save ({
status: status
});
答案 1 :(得分:0)
相信我们发现了这个问题。
当toggleStatus改变状态或其他什么时,模型上的其他地方可能有一个监听器。当模型发生变化(特别是状态)时,它会被破坏。因此,当completeTask继续时,模型已在此时被销毁。
感谢所有人的帮助,大家:)。