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

Backbone : Determing if a View has Already Been Loaded

本文关键字:是否 加载 视图 主干      更新时间:2023-09-26

我想通过更改 url 来更改主干应用程序的当前页面。 我已经设置了路线,当我更改 url 时,我的页面正在发生变化,预计每次我访问给定路线时,都会向 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
    }
  }

..并为我的每条路线执行此操作?

谢谢!

似乎很湿,我宁愿做一些类似叫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,这也会使事情变得更容易。

应用和切片以及所有这些,以便您应该能够在第一个之后将任意数量的参数传递到因子中,尽管这都是来自我的头脑,因此这可能是一个学习实验,可以使其工作并理解使用应用程序和调用的乐趣(如果您使用CoffeeScript,您会更快乐)

享受!