使用路由器时,骨干渲染但插件不起作用

时间:2014-01-02 11:02:20

标签: javascript jquery backbone.js jquery-plugins

我在这里找到了一个下拉列表插件:http://patrickkunka.github.io/easydropdown/

我在Backbone中使用它但是我必须手动激活它并确保它在渲染完成后运行。它在我刷新页面时有效,但如果我离开页面然后回到它,插件就不会生效。渲染功能每次都在运行,所以我不知道为什么它在我正常导航时不会起作用。

    render: function() {

        setTimeout(function(){
            $(function(){
                var $selects = $('select');

                $selects.easyDropDown({
                    cutOff: 5,
                    wrapperClass: 'dropdown',
                    onChange: function(selected){
                        // do something
                    }
                });
            });
        }, 0);
        console.log("Rendering");
        this.$el.html(template());
        return this;

    }

这是我的路由器代码:

    return Backbone.Router.extend({

    initialize: function() {

        // Render the layout view only once and simple change the contents of #content
        // as per the desired route
        var $body = $('body');
        var layoutView = new LayoutView({ el: $body }).render();
        this.$el = $("#content", $body);
        this.currentView = null;

        // Init the subrouters
        this.bookRouter = this.addSubRouter(BookRouter, "books");
        this.quoteRouter = this.addSubRouter(QuoteRouter, "quotes");
        this.employeeRouter = this.addSubRouter(EmployeeRouter, "employees");
        this.saleRouter = this.addSubRouter(SaleRouter, "sales");

        // When the route changes we want to update the nav
        this.bind("route", _.bind(this.updateNav, this)); 

    },

    // These are the base routes
    // Other routes can be attached by creating subroutes
    routes: {

        // viewIndex is the main site index
        // All other routes are handled by sub-routers
        "": "viewIndex",
        "upload": "upload",
        "export": "export",
        "test": "test",

    },

    // Add a sub route at the given route and listen for events
    addSubRouter: function(subRouterClass, route) {

        var router = new (subRouterClass)(route, { createTrailingSlashRoutes: true });
        router.on("view", _.bind(this.switchView, this));
        router.on("route", _.bind(function(route, section) {

            this.trigger("route", route, section);

        }, this));

        return router;

    },

    // Change from this.currentView to newView
    switchView: function(newView) {

        // Do we need to remove the old view?
        if (this.currentView) {
            this.currentView.remove();
        }

        this.currentView = newView;

        // Add the new view
        this.$el.append(newView.render().$el);
        newView.addedToDOM();

    },

    updateNav: function(route, section) {

        // Get hold of the nav element
        var $nav = $("#nav");

        // Clean up the route string
        route = route.replace("route:", "");

        // Remove the currently active item
        $(".active", $nav).removeClass("active");

        // Apply .active to any navigation item that has a matching data-route attribute
        $("[data-route=\"" + route + "\"]", $nav).addClass("active");

    },

    viewIndex: function () {

        var view = new IndexView();
        this.switchView(view);

    },

    upload: function (){
        var view = new UploadIndexView();
        this.switchView(view);
    },

    export: function() {
        var view = new ExportIndexView();
        this.switchView(view);
    },

    test: function() {
        var view = new TestIndexView();
        this.switchView(view);
    }

});

});

0 个答案:

没有答案