有一个基于php构建的RESTful Web服务。目前,它仅用于移动应用程序。我需要使用相同的API构建Web应用程序。我认为这将是一个基于BackboneJS的单页面应用程序。后端由Zend Framework 2驱动。
之前我曾与BackboneJS合作,但我是创建SPA的完全初学者。我关心的第一件事是如何在一个新的"页面"中将所有模型和集合与一个请求同步到Web服务。请求。例如,我的应用程序中的第一页将是登录页面。很明显,此时所有必需的数据都将加载页面。但是,一旦用户登录,我需要"重定向"他是一个仪表板,这是一个完全不同的页面,具有不同的布局和东西。我想到的一个解决方案是向Web服务发出特殊请求,其中包含引导页面所需的API URL列表。该服务将解析请求并在内部调用每个api所需的控制器并准备响应。我不知道如何处理模板。使用单个请求提取所有必需模板的最佳方法是什么?
我将非常感谢有关此主题的任何帮助和建议。
答案 0 :(得分:0)
我发现使用Backbone路由器来设置一个页面路由,它传递一个url splat,如下所示:
routes: {
'*page' : 'page'
}
page: function (page) {
customEvent.trigger('router:changed:page', page);
}
通过这种方式,您可以触发一个事件来表示页面已更改,并将充当其他视图的钩子以进行渲染和初始化。然后,您可以创建一个页面模块来初始化正确的视图,如下所示:
define(['backbone'], function (Backbone) {
var PageModule = Backbone.View.extend({
el: $('#main'), // main container
initialize: function () {
this.listenTo(customEvent, 'router:changed:page', this.render);
},
render: function (page) {
this.$el.empty(); // empty the view each time
switch(page) {
case 'dashboard':
// load dashboard view
break;
case 'other':
// load other view
break;
}
return this;
}
});
});
然后,每个视图都会加载它可能需要的所有模板和子视图。
define(['backbone', 'insertTemplate', 'collection'], function (Backbone, InsertTemplate, Collection) {
var DashboardView = Backbone.View.extend({
// do your view magic in here but as you can see you have access to a template and collection but you could add as many items as required.
});
return DashboardView;
});
页面模块成为一种工厂方法。
我建议看一下像Marionette或Layout Manager这样的框架,因为它可以帮助解决这个问题。
这是一个粗略的例子,希望能让你思考。还有其他一些方法可以做到,但这是一个开始。