一次查看 2 个或更多页面 (backbone.js)

One view for 2 or more pages (backbone.js)

我有两个页面。其中之一是具有很多功能的仪表板。第二页是共享仪表板——第一页的简单版本。 仪表板包含数据库的视图(它可以包含很多其他信息,但这个有问题)。您可以单击过滤器按钮,然后将打开模态 window。所以,简单版的仪表板没有这种可能性。我想添加它,但我不想从完整版仪表板中复制+粘贴代码,因为这部分代码大约有两千行。我将添加一些原始代码示例:

DashboardView = SomeAnotherView.extend({
initialize: function() {...},
events: {...} // huge objects of jQuery events,
render: function () {...},
... // 2k lines of functions for events
});

如何在另一个页面上使用此视图?我试图从这个视图调用一个函数:

DashboardView.prototype.filterClicked(event);

但是在这种情况下event.curentTarget是null(这个函数是必须的),我也尝试发送"this"来获取上下文,但是失败了。 是否有可能在 Backbone.js 中使用一个 View 来查看 2+ 页而无需任何巨大的 copy/past 代码?

如果您有共享大量功能的视图,您可以考虑使用相同的视图类型,但在实例化时将其开放给某些配置。例如:

var DashboardView = Backbone.View.extend({
    initialize: function(options) {
        this.allowFunctionX = (options && options.allowFunctionX);
        this.allowFunctionY = (options && options.allowFunctionY);
    },
    // etc
    functionX: function() {
        if (!this.allowFunctionX) { return; }
        // do the function...
    },
    functionY: function() {
        if (!this.allowFunctionY) { return; }
        // do the function...
    },
});

然后在一页上:

var firstDashView = new DashboardView({allowFunctionX: true});

在另一页上:

var secondDashView = new DashboardView({allowFunctionY: true});

如果功能差异太大,这可能变得不值得(并且可能有比传递一长串布尔值更好的配置方法!)。如果您的两个页面上的要求明显不同,我觉得复制他们都需要的代码并不是什么大错。

理想情况下,如果您有一个视图的简单版本和完整版本,您应该有一个 "base view"(简单版本)并且完整版本应该扩展基本视图。

它看起来像:

var SimpleDashbard = Backbone.view.extend({});
var Dashboard = SimpleDashbard.extend({});

通过这种方式,Dashboard 将可以访问 SimpleDashbard 中的方法。

您的情况听起来您需要在基本视图中使用扩展视图中的方法。这不是一个好主意。理想情况下,如果它是共享的,你应该将它移动到基础 view/extract 它成为一个实用方法或服务,当然这涉及重写这个方法以使其可重用