所以我已经有好几天了。我正在处理应用程序的聊天组件。所有通信工作正常,聊天与Redis一起保存,Backbone控制器功能正常。问题是在前端渲染聊天条目。这是有问题的代码:
class views.ChatItemView extends Backbone.View
tagName: 'li',
initialize: (options) ->
console.log(@.model)
_.bindAll @, 'render'
@model.bind 'all', @render
render: ->
$(@el).html @model.get('name') + ': ' + @model.get 'text'
@
这是Firebug警告错误:
Uncaught TypeError: Object add has no method 'bind'
views.ChatItemView.ChatItemView.initializeviews.js:21
Backbone.Viewbackbone.js:884
ChatItemViewviews.js:13
views.ChatView.ChatView.addChatviews.js:76
Backbone.Events.triggerbackbone.js:117
_.extend._onModelEventbackbone.js:635
Backbone.Events.triggerbackbone.js:117
_.extend._addbackbone.js:595
_.extend.addbackbone.js:451
views.ChatView.ChatView.msgReceivedviews.js:90
NodeChatController.initcontroller.js:17
EventEmitter.emitsocket.io.js:627
SocketNamespace.onPacketsocket.io.js:2171
Socket.onPacketsocket.io.js:1861
Transport.onPacketsocket.io.js:1309
Transport.onDatasocket.io.js:1286
WS.open.websocket.onmessage
有没有人知道为什么会发生这种情况或有没有人遇到类似问题?
答案 0 :(得分:0)
不确定为什么会收到错误,但是,使用CoffeeScript时不需要_.bindAll。只需使用胖箭头作为渲染功能:
class views.ChatItemView extends Backbone.View
tagName: 'li',
initialize: (options) ->
console.log(@.model)
@model.bind 'all', @render
render: =>
$(@el).html @model.get('name') + ': ' + @model.get 'text'
@
答案 1 :(得分:0)
我明白了。
这是chatView初始化代码
class views.ChatView extends Backbone.View
initialize: (options) ->
@model.chats.bind 'add', @addChat
@socket = options.socket
msgReceived: (message) ->
newChatEntry = new models.ChatItem
newChatEntry.mport message.data
@model.chats.add newChatEntry
它将'add'绑定到@addChat操作。
addChat: (chat) ->
view = new views.ChatItemView {model: chat}
$('#chat_list').append view.render().el
这种方式很好但以前我有:
@model.chats.bind 'all', @addChat
所以,将'all'绑定到@addChat会导致麻烦。
答案 2 :(得分:-1)
我不确定这是因为coffeescript不是我的事, 但是
console.log(@.model)
似乎有用吗?但是在尝试bind方法时使用@model
不应该这也是
@.model.bind 'all', @render