繁体   English   中英

使用coffeescript的骨干上下文问题

[英]Backbone context issue with coffeescript

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

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

我不知道为什么会这样,因为我使用=>来保存上下文,当我在console.log @$el它总是向我显示同一个类,即。 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}
    @

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

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

与bind不同

object.on(event,callback,[context])

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

试着做

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

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

问题

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM