2017-08-22 11 views
-1

我有两页。其中之一是仪表板,具有很多功能。第二页是共享仪表板 - 第一页的简单版本。 仪表板包含数据库的视图(它可以包含许多其他信息,但这个问题与此有关)。你可以点击过滤按钮,模态窗口将被打开。所以,仪表板的简单版本不具备这种可能性。我想添加它,但我不想从完整版的仪表板中复制+过去的代码,因为这部分的代码大约有两千行。我会添加一些原始码例如:一种观点为2个或多个页面(Backbone.js的)

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为空(这是该功能必须的),我也试着发送“这个”,以获取上下文,但它失败了。 是否有Backbone.js的一种可能性,使用2+页一个查看没有任何巨大的拷贝/粘贴代码?

+0

骨干观点应当松散耦合组件。所以你可以有一个表视图的视图,作为表格的页面,简单的菜单以及仅将其他视图作为其自身的一部分使用的仪表板。 –

+0

我写了一个[答案](https://stackoverflow.com/a/40567785/1218980),它用一个路由器例子解释了一个简单的布局概念。 –

+0

此外,现在的问题是[太宽泛](https://stackoverflow.com/help/closed-questions)。你基本上是问如何使用Backbone来构建一个单页面的应用程序... –

回答

1

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

它会看起来像:

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

这样仪表盘将有来自SimpleDashbard访问方法。

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

-1

如果您有共享大量的功能性的意见,你可以考虑使用同一个视图类型,但实例化时打开它的一些配置。例如:

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

这可能会成为不值得,如果功能发散太多(有可能有更好的配置方式,而不是传入大量的布尔值!)。如果你的要求在你的两页上显着不同,我觉得重复他们都需要的代码并不是一个重大的罪过。

+0

谢谢。我会检查它。这不是我的项目,我刚刚开始学习Backbone并解决了问题。 –

相关问题