我有一个主干ItemView,它有一些带有类的DIV,还有一个DIV有类active
。
我写了一行jQuery代码来隐藏所有没有active
类的元素,但是它不起作用。
Show.EventItemView = Marionette.ItemView.extend({
template: '#id-template',
events: {
'click #js-tabs li.js-tab': 'tabs'
},
tabs: function(e) {
var target = e.target,
tab_id = $(e.currentTarget).attr('js-data-tab-id');
$('#js-tabs .js-tab-content').hide();
$('#js-tabs .js-tab-content#' + tab_id).show();
},
initialize: function() {
$('#js-tabs .js-tab-content:not(.active)').hide();
console.log('Initialized');
}
});
"Initialized“文本将显示在控制台上,但不包含active
类的元素不会被隐藏。
如果直接在Chrome控制台中运行这行$('#js-tabs .js-tab-content:not(.active)').hide();
,将会工作,但应该会在视图渲染(或其他方法)时自动触发。
谢谢你的帮助。
发布于 2017-06-29 15:00:29
实例化视图时,在render()
方法之前调用initialize()
。这意味着视图还没有被渲染。Marionette.ItemView
为您提供了一些有用的回调方法。
每次渲染时都会调用onRender()
。如果您将模型同步到服务器,当模型内容更新时,这可能会被调用多次。
在一个区域中显示的每个视图都会调用一次onShow()
。如果你使用regions,那么就使用这个。
发布于 2017-06-29 11:28:42
在Backbone视图中,initialize是渲染视图时执行的第一个方法。因此,在这里,您甚至在视图呈现之前就试图进行操作。
尝试将该代码移动到render函数中,或者在加载视图(页面/内容)之后。
还要尝试在控制台中使用断点进行调试,以确保在执行该行代码之前是否加载了内容。
https://stackoverflow.com/questions/44814937
复制相似问题