Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 一个视图用于2个或更多页面(backbone.js)_Javascript_Backbone.js - Fatal编程技术网

Javascript 一个视图用于2个或更多页面(backbone.js)

Javascript 一个视图用于2个或更多页面(backbone.js),javascript,backbone.js,Javascript,Backbone.js,我有两页。其中之一是具有许多功能的仪表板。第二个页面是共享仪表板-第一个页面的简单版本。 仪表板包含数据库的视图(它可以包含许多其他信息,但这个信息的问题在于)。您可以点击过滤器按钮,模式窗口将被打开。因此,简单版本的仪表板不具备这种可能性。我想添加它,但我不想从仪表板的完整版本复制+过去的代码,因为这部分的代码大约有2000行。我将添加一些基本代码示例: DashboardView = SomeAnotherView.extend({ initialize: function() {...},

我有两页。其中之一是具有许多功能的仪表板。第二个页面是共享仪表板-第一个页面的简单版本。 仪表板包含数据库的视图(它可以包含许多其他信息,但这个信息的问题在于)。您可以点击过滤器按钮,模式窗口将被打开。因此,简单版本的仪表板不具备这种可能性。我想添加它,但我不想从仪表板的完整版本复制+过去的代码,因为这部分的代码大约有2000行。我将添加一些基本代码示例:

DashboardView = SomeAnotherView.extend({
initialize: function() {...},
events: {...} // huge objects of jQuery events,
render: function () {...},
... // 2k lines of functions for events
});
如何在其他页面上使用此视图?我尝试从此视图调用函数:

DashboardView.prototype.filterClicked(event);
但在本例中event.currentTarget为null(此函数需要),我也尝试发送“this”以获取上下文,但失败了。
<强>有可能在ReBoo.js中使用2个页面的一个视图而不需要任何大的拷贝/过去的代码吗?< /强>

如果你拥有共享大量功能的视图,你可以考虑使用相同的视图类型,但是在实例化时打开它到一些配置。例如:

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});

如果功能差异太大,这可能就不值得了(而且可能有比传递一长串布尔值更好的配置方法!)。如果您的两个页面上的需求有很大的不同,我觉得复制他们都需要的代码不是一个主要问题。

理想情况下,如果您有一个简单版本和完整版本的视图,您应该有一个“基本视图”(简单视图),完整版本应该扩展基本视图

它看起来像:

var SimpleDashbard = Backbone.view.extend({});
var Dashboard = SimpleDashbard.extend({});
这样,仪表板就可以从
SimpleDashbard
访问这些方法


您的情况听起来好像需要在基本视图中使用扩展视图中的方法。这不是个好主意。理想情况下,如果它是共享的,您应该将其移动到基本视图/将其提取到实用程序方法或服务中,当然这涉及到重新编写此方法以使其可重用

主干视图应该是松散耦合的组件。因此,您可以拥有一个表视图视图、作为其中表的页面视图、简单菜单视图以及仅使用其他视图作为其一部分的仪表板视图。我写了一篇文章,用路由器示例解释了一个简单的布局概念。此外,现在的问题是。你基本上是在问如何使用主干网构建一个单页应用程序……谢谢。我去查一下。这不是我的项目,我刚开始学习主干,就遇到了问题。