14

我只是想了解 Backbone.Marionette 关于 UI 元素的观点背后的决定。在现有 DOM 元素上实例化 Marionette.View 时,如下所示:

view = new Marionette.ItemView({
     el: "#element",
     ui : {
         whatever : "#whatever"
     }
});

到目前为止,我可以访问view.$el里面的 jquery 选择器。view.initialize但是,当我尝试访问时view.ui.whatever,我只能访问选择器,即字符串“#whatever”,而不是实际的$("#whatever")jquery 选择器。

这样做的原因是因为Marionette.View.bindUIElements()只被调用render而不是之前initialize

我想知道您是否认为这种行为是合乎逻辑的,为什么?

我只是在将视图附加到el现有render().

4

3 回答 3

26

将视图附加到现有元素是一个例外。正常的视图生命周期涉及调用render,如果不这样做,UI 元素将无法绑定任何内容。

当您需要将视图附加到现有元素时,只需调用this.bindUIElements()您的方法。initialize

于 2013-03-09T20:52:03.643 回答
1

当我使用 Marionette 时,我将必须访问 ui 元素的代码放在 onShow 方法中。这个事件在 dom 准备好并且元素准备好被操作之后触发。在此方法中,您的 ui.whatever 现在将指向一个元素而不是字符串。

于 2013-03-10T23:26:22.007 回答
0

我认为你有这个问题,因为你必须访问 jQuery 元素

this.ui.whatever

因为“this”已经是一个视图实例。请参阅: http: //marionettejs.com/docs/v2.4.4/marionette.itemview.html#organizing-ui-elements

于 2016-01-28T11:23:10.510 回答