这是我在backbonejs中执行路由的方法,其中在决定调用哪个外部模板之前首先获取路由及其参数。我觉得这很灵活。
var Router = Backbone.Router.extend({
routes: {
//'': 'renderBasic',
':module/:method/': 'renderDynamicViewPageBasic',
':module/:branch/:method/': 'renderDynamicViewPageBranch',
':module/:branch/:method/set:setnumber/page:pagenumber/': 'renderDynamicViewPagePager',
':module/:branch/:method?set=:setnumber&page=:pagenumber': 'renderDynamicViewPagePager'
},
renderDynamicViewPageBasic: function (module,method) {
$(el).html(Handlebars.getTemplate('template1')(data));
},
renderDynamicViewPageBranch: function (module,branch,method) {
$(el).html(Handlebars.getTemplate('template2')(data));
},
renderDynamicViewPagePager: function (module,branch,method,setnumber,pagenumber) {
$(el).html(Handlebars.getTemplate('template3')(data));
}
});
在emberjs中,我能做同样的事吗 - 在决定调用哪个外部模板之前先做出溃败并获取其参数?
我阅读了文档并对其进行了测试。它似乎不太灵活 - 例如,
App.Router.map(function() {
this.route("about", { path: "/about" });
this.route("favorites", { path: "/favs" });
});
在获取模板之前是否可以获取路线和参数以及控制器?
如果不是,它似乎与使用Angularjs的情况相同,我最终决定不使用它,因为它在排序参数之前首先得到模板。
答案 0 :(得分:1)
您可以将函数与$ route params一起传递,以实际获得angularjs中的自定义结果。
template: function($params) {
return app.$templateCache.get($params); // or make template yourself from another source
}
答案 1 :(得分:1)
您可以使用renderTemplate
钩子在EmberJs中定义模板“post params”,您可以在其中自定义您想要使用的模板。
http://emberjs.jsbin.com/oXUqUJAh/1/edit
App.Router.map(function() {
this.route('apple', {path: 'apple/:id'});
});
App.AppleRoute = Ember.Route.extend({
model: function(params) {
return {coolProperty: params.id};
},
renderTemplate: function(controller, model) {
// send in the template name
this.render(model.coolProperty);
}
});