【问题标题】:Backbone : Determing if a View has Already Been LoadedBackbone:确定视图是否已经加载
【发布时间】:2012-08-08 23:18:50
【问题描述】:

我想通过更改 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
    }
  }

..为我的每条路线都这样做?

谢谢!

【问题讨论】:

  • 我完全按照你说的做,检查已经渲染的视图
  • 是的,正如@ClaudiuHojda 所说,我也是:).. 看看这个问题stackoverflow.com/questions/11796289/… 我认为是重复的
  • 酷 - 这只是一个理智/最佳实践检查。谢谢。

标签: javascript backbone.js


【解决方案1】:

这似乎很湿,我宁愿做一些类似电话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))

}

类似的东西,我习惯使用咖啡脚本,这也会使事情变得更容易。

应用和切片以及所有这些,以便您应该能够在第一个参数之后将任意数量的参数传递给因子,尽管这都是我的想法,所以它可能是一个学习实验来获得它工作并理解使用 apply 和 call 的乐趣(如果你使用 coffeescript 你会更开心)

享受吧!

【讨论】:

    猜你喜欢
    • 2014-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-28
    • 2015-02-07
    • 1970-01-01
    • 2010-09-20
    相关资源
    最近更新 更多