我已经使用Backbone.js和Require.js启动了一个JavaScript应用程序。应用程序显示不同的顶级视图 - 搜索项目,编辑项目的不同方面,将项目相互连接。每个视图都是专门显示的。
路由器模块的文件如下所示:
define([
'backbone',
'myapp'
'views/search',
'views/edit1',
'views/edit2',
'views/connect'],
function(Backbone, App, SearchView, EditView1, Editview2, ConnectView) {
return Backbone.Router.extend({
routes: {
"search": "doSearch",
"edit1": "doEdit1",
// more routes here
},
doSearch: function() {
App.main.show(new SearchView()); // Marionette.js regions
},
doEditView1: function() {
App.main.show(new EditView1());
},
// etc.
});
});
在我的代码中有更多的视图。有没有办法减少一个对象的长需求视图列表?也许通过另一个架构或一些require.js技巧?
也许我太过受到Symfony 2概念的影响了“路由器”是什么?
答案 0 :(得分:1)
我自己一直在考虑这个问题。
一个简单的解决方案是定义一个包含所有视图的模块,然后只包含 作为依赖项:
视图/ all.js
define([
'views/search',
'views/edit1',
'views/edit2',
'views/connect'],
function(SearchView, EditView1, EditView2, ConnectView) {
return {
"EditView1": EditView1,
"EditView2": EditView2,
"ConnectView": ConnectView
"SearchView": SearchView
};
});
然后在您的路由器模块中,您可以将views / all包含为分配给变量Views
的依赖项,并将任何视图调用为Views.EditView1
,Views.EditView2
等等:
define([
'backbone',
'myapp',
'views/all'],
function(Backbone, App, Views) {
...
doSearch: function() {
App.main.show(new Views.SearchView());
},
...
});
我从来没有尝试过这个,但我认为它会起作用。
答案 1 :(得分:1)
在语法层面,Require.js也支持“simplified CommonJS wrapping”。显然这不能帮助你避免长依赖列表(正如@ shioyama的建议所做的那样),但会最大限度地降低使用命名函数参数的不匹配依赖名称的风险,并有助于保持整洁(呃)。