coffeescript的主干上下文问题

Backbone context issue with coffeescript

本文关键字:上下文 问题 coffeescript      更新时间:2023-09-26

我有一个简单的日历,每当日期改变时都会重新呈现。在onClick之后,日期被设置触发change:date事件并调用呈现方法。

但是,上下文是关闭的,因为html没有被替换。

我不知道为什么会这样,因为我使用=>来保存上下文,当我console.log @$el时,它总是向我显示相同的类ie。WidgetView

它工作时,我做$(elementName).html,但不与@$el.html。想法吗?

class WidgetView extends sandbox.mvc.View
  className: 'sidebar-group'
  events:
    "click a" : "onClick"
  template: sandbox.template.compile tmpl
  initialize: (options) ->
    @date = new DateModel {rid:1000}
    @listenTo @date, "change:date", @render
  onClick: (e) ->
    e.preventDefault()
    # Get value
    value = $(e.currentTarget).text()
    # Set date model
    @date.set {date:value}
    # Emit model change event
    sandbox.emit "model.date.change", @date
    return false
  render: (model) =>
    data = CalendarResource()
    @$el.html @template {calendar: data}
    @

我认为问题很简单。如果你没有读过,请仔细看看

对象。listenTo(other, event, callback)

绑定

对象。On (event, callback, [context])

如果你看到listenTo没有以任何形式设置回调的上下文

试试

  @listenTo @date, "change:date", _.bind(@render, this);
我不是咖啡编剧,但你明白我的意思。强制构造函数中的上下文始终是实例

问题

这个特殊问题的问题是,我正在使用JQuery页面幻灯片插件,这是复制元素到另一个节点。

结果,我正在更新参考节点,插件没有保持新节点同步。

解决方案

由于插件没有刷新方法,我将不得不复制元素并重新绑定所有事件。