0

我有一个简单的日历,只要日期更改,它就会重新呈现。设置日期后onClick触发 change:date 事件并调用 render 方法。

但是,由于没有替换 html,因此上下文已关闭。

我不知道为什么会这样,因为我=>用来保留上下文并且当我console.log @$el总是向我显示相同的类时,即。小部件视图

它在我这样做时有效,$(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}
    @
4

2 回答 2

2

我认为问题很简单。如果您没有阅读,请仔细查看listenTo。

object.listenTo(其他,事件,回调)

不像绑定

object.on(事件,回调,[上下文])

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

试着做

  @listenTo @date, "change:date", _.bind(@render, this);

Bleh 我不是咖啡脚本编写者,但你明白了。强制构造函数中的上下文始终是实例。

于 2013-06-07T01:04:41.437 回答
0

问题

这个特定问题的问题是我正在使用 JQuery Page Slide 插件,该插件将元素复制到另一个节点。

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

解决方案

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

于 2013-06-12T15:36:37.270 回答