Backbonejs路由VS emberjs路由

时间:2014-01-03 15:02:23

标签: ruby-on-rails angularjs backbone.js ember.js backbone-routing

这是我在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的情况相同,我最终决定不使用它,因为它在排序参数之前首先得到模板。

2 个答案:

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