骨干:确定视图是否已加载

时间:2012-08-08 23:18:51

标签: javascript backbone.js

我想通过更改网址来更改我的骨干应用程序的当前页面。我有路由设置,当我更改网址时,我的网页正在发生变化,我希望每次访问给定路线时都会向dom呈现新视图。

我的路由器:

myApp.Application = Backbone.Router.extend({

  routes: {
    ''      : 'home'
    //etc
  },

  initialize : function() {
    myApp.dom.$container = $('#container');
    myApp.dom.$container.empty();
  },

  home : function() {
    myApp.loginView = new myApp.views.home();
    myApp.dom.$container.append(myApp.home.render().el);
  }

  })

我是否正确地认为我需要在呈现之前检查(例如)myApp.loginView是否存在?

类似于:

  home : function() {
    if (!myApp.loginView) {}
      myApp.loginView = new myApp.views.home();
      myApp.dom.$container.append(myApp.home.render().el);
    } else {
      //just show it
    }
  }

..为我的每条路线做这个吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

这似乎很潮湿,我宁愿做一些事情,比如打电话isAlreadyRendered()

此外,当myApp.views似乎是类时,将所有内容都粘贴到myApp.SpecificName上。

使用App.views.class = new App.Views.Class

初始化怎么样?

然后创建一个工厂来启动视图,比如

function factory(className){
  if( App.views[className.toCamelCase()] ) return;
  App.views[className.toCamelCase()] = new App.Views[className].apply(App.Views, [].slice.call(arguments, 1))

}
像这样的东西,我习惯使用coffeescript,这会让事情变得更容易。

apply和slice以及所有这些都是为了让你能够在第一个之后将尽可能多的args传入因子,尽管这一切都来自我的头脑所以它可能是一个学习实验来获得它工作和理解使用申请和电话的乐趣(如果你使用coffeescript,你会更高兴)

享受!