与第三方库结合

下面以director为例,介绍怎么实现与第三方路由库的整合。

针对上面的简单路由使用方式,我们需要更改路由配置routes,并且无需自己绑定hashchange事件, 另外director支持路由参数,所以我们扩展App组件的load()方法,让它实例化时可以传入数据。

  1. var Index = Intact.extend({template: '<div>Index</div'});
  2. var User = Intact.extend({template: '<div>userId: {self.get("userId")}</div>'});
  3. var App = Intact.extend({
  4. template: '<div>{self.get("view")}</div>',
  5. defaults: function() {
  6. return {
  7. view: null
  8. }
  9. },
  10. load: function(Page, data) {
  11. var page = new Page(data);
  12. this.set('view', page);
  13. }
  14. });
  15. var app = Intact.mount(App, document.getElementById('app'));
  16. var router = Router({
  17. '/': function() {
  18. app.load(Index);
  19. },
  20. '/user/:userId': function(userId) {
  21. app.load(User, {userId: userId});
  22. }
  23. }).configure({
  24. notfound: function() {
  25. router.setRoute('/');
  26. }
  27. });
  28. router.init('/');

可以看到,不管是简单路由还是和第三方路由库整合,都相当简单,而且借助Intact强大的继承功能,你 无需定义嵌套路由,就能实现复杂的路由逻辑。