在Backbone View Render上没有触发jQuery函数

时间:2017-06-29 01:27:01

标签: jquery backbone.js marionette

我有一个Backbone 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');
        }
    });

“已初始化”文本正在控制台上显示,但没有类active的元素未被隐藏。

如果直接在Chrome控制台中运行此行$('#js-tabs .js-tab-content:not(.active)').hide();,则可以正常工作,但应在视图渲染(或其他方法)上自动启动。

感谢您的任何进展。

2 个答案:

答案 0 :(得分:2)

在实例化视图和initialize()方法之前调用

render()。这意味着视图尚未呈现。 Marionette.ItemView为您提供了一些有用的回调方法。

每次渲染都会调用

onRender()。如果将模型同步到服务器,则在模型内容更新时可能会多次调用此模型。

每个区域中显示的视图都会调用

onShow()一次。如果您使用regions,请使用此功能。

答案 1 :(得分:0)

在Backbone视图中,initialize是渲染视图时执行的第一个方法。所以在这里你甚至试图在渲染视图之前进行操作。

尝试将该代码移动到渲染功能中或在加载视图(页面/内容)之后。

还尝试在控制台中使用断点进行调试,以确保在执行该行代码之前是否加载了内容。