我有一个简单的日历,只要日期发生变化就会重新呈现。设置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}
@
答案 0 :(得分:2)
我认为问题非常简单。如果你没有看过它,请仔细看看。
object.listenTo(其他,事件,回调)
与bind
不同object.on(event,callback,[context])
如果你看到listenTo没有以任何形式或形式设置回调的上下文。
尝试做
@listenTo @date, "change:date", _.bind(@render, this);
Bleh我不是咖啡脚本,但你明白了。强制构造函数中的上下文始终是实例。
答案 1 :(得分:0)
这个特殊问题的问题在于我使用的是JQuery Page Slide插件,该插件将元素复制到另一个节点。
结果,我正在更新参考节点,插件没有保持新节点同步。
由于插件没有刷新方法,我将不得不复制元素并重新绑定所有事件。