我正在开发基于backbone.Marionette的Rails Api,并尝试在项目视图呈现时执行jquery代码。 这是我的代码。
class Step1.Layout extends App.Views.ItemView
template: "wizard/step1/layout"
triggers:
"render": "jquery:datetimepicker:runnable"
"click .glyphicon-calendar" : "jquery:datetimepicker:runnable" ## For Test
这是控制器部分。
Step1.Controller =
display: ->
view = @getStepView()
view.on "jquery:datetimepicker:runnable", ->
$('#due_date').datetimepicker format: 'MM/DD/YYYY'
App.mainRegion.show view
getStepView: ->
new Step1.Layout
所以,"点击.glyphicon-calendar"表现良好,但"渲染"根本不会在控制器中调用事件监听器。 我猜是因为在真实视图存在之前无法触发事件,但不确定。 请注意我希望知道如何在itemView渲染时执行jquery代码,所以请让我知道它的解决方案。
答案 0 :(得分:0)
如果您使用的是最新版本的Marionette,则可能需要使用附加事件而不是渲染。渲染意味着生成了html,但这并不意味着它已经存在于DOM中。另一方面,当您的视图在DOM中时,会触发附加事件。 datetimepicker插件可能需要将视图附加到DOM。
看看这两个链接:
答案 1 :(得分:0)
坚持@k2ndlab
答案的精神,您所要做的就是稍微更改您的controller
代码,如下所示:
Step1.Controller =
display: ->
view = @getStepView()
view.on "attach", -> // Listen to when this view's parent Region triggers 'attach'
$('#due_date').datetimepicker format: 'MM/DD/YYYY'
App.mainRegion.show view
事实是triggers
用于将DOM与视图的交互转换为视图事件,但不是将视图事件转换为其他事件,如docs中所述。这就是为什么要做
triggers:
"attach": "jquery:datetimepicker:runnable"
不适合您,因为triggers
没有侦听视图事件。在您的情况下,您只想知道视图何时在DOM中并准备与jQuery交互,这就是监听'attach'
事件的目的。
顺便提一下,使用onAttach
建议的@k2ndlab
事件,即
class Step1.Layout extends App.Views.ItemView
template: "wizard/step1/layout"
onAttach: ->
this.trigger 'jquery:datetimepicker:runnable'
也会奏效。但同样,这有点人为,因为你真正关心的是'attach'
事件。