Javascript 一个视图用于2个或更多页面(backbone.js)
我有两页。其中之一是具有许多功能的仪表板。第二个页面是共享仪表板-第一个页面的简单版本。 仪表板包含数据库的视图(它可以包含许多其他信息,但这个信息的问题在于)。您可以点击过滤器按钮,模式窗口将被打开。因此,简单版本的仪表板不具备这种可能性。我想添加它,但我不想从仪表板的完整版本复制+过去的代码,因为这部分的代码大约有2000行。我将添加一些基本代码示例:Javascript 一个视图用于2个或更多页面(backbone.js),javascript,backbone.js,Javascript,Backbone.js,我有两页。其中之一是具有许多功能的仪表板。第二个页面是共享仪表板-第一个页面的简单版本。 仪表板包含数据库的视图(它可以包含许多其他信息,但这个信息的问题在于)。您可以点击过滤器按钮,模式窗口将被打开。因此,简单版本的仪表板不具备这种可能性。我想添加它,但我不想从仪表板的完整版本复制+过去的代码,因为这部分的代码大约有2000行。我将添加一些基本代码示例: DashboardView = SomeAnotherView.extend({ initialize: function() {...},
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
访问这些方法
您的情况听起来好像需要在基本视图中使用扩展视图中的方法。这不是个好主意。理想情况下,如果它是共享的,您应该将其移动到基本视图/将其提取到实用程序方法或服务中,当然这涉及到重新编写此方法以使其可重用主干视图应该是松散耦合的组件。因此,您可以拥有一个表视图视图、作为其中表的页面视图、简单菜单视图以及仅使用其他视图作为其一部分的仪表板视图。我写了一篇文章,用路由器示例解释了一个简单的布局概念。此外,现在的问题是。你基本上是在问如何使用主干网构建一个单页应用程序……谢谢。我去查一下。这不是我的项目,我刚开始学习主干,就遇到了问题。