【问题标题】:event order Backbone.Marionette.Application.addInitializer and $(document).read()事件顺序 Backbone.Marionette.Application.addInitializer 和 $(document).read()
【发布时间】:2013-05-07 09:59:24
【问题描述】:

试图了解启动事件...

所以我为此创建了一个小提琴http://jsfiddle.net/erichbschulz/59cDq/

这个:

console.log("starting");  
MyInnerApp = new Backbone.Marionette.Application();
MyOuterApp = new Backbone.Marionette.Application();
MyInnerApp.addInitializer(function(options){
  console.log("MyInnerApp initializer running");  
});
MyOuterApp.addInitializer(function(options){
  console.log("MyOuterApp Initializer running");  
});
$(document).ready(function(){
  console.log("$(document).ready");
  MyInnerApp.start();
});
MyOuterApp.start();
console.log("end of file");  

我发现木偶代码在 $(document).ready() 之前触发...但总是这样吗?

$(document).ready() 在木偶应用中的作用是什么?

编辑:感谢 Bryan 提及初始化:updated fiddle

【问题讨论】:

  • 我一般在加载完应用依赖后调用start方法(我使用RequireJS来加载它们)。

标签: jquery events marionette


【解决方案1】:

你可能早就解决了这个问题...

本质上,Marionette 应用和$(document).ready() 之间没有任何关系。

$(document).ready() 是在 DOM 完全加载时触发的回调。但是,如果您将 js 加载到 html document 的底部,则不需要它。

如果由于某种原因你不能将你的 js 移动到 html 文档的底部,那么你需要运行任何依赖于 DOM 的代码(例如对 .render() 的调用)在$(document).ready()回调。

【讨论】:

    【解决方案2】:

    addInitializer() 在应用程序初始化时运行 (MyInnerApp = new Backbone.Marionette.Application())。还有其他可以使用的应用程序事件:after 应用程序已初始化或已启动。

    https://github.com/marionettejs/backbone.marionette/blob/master/docs/marionette.application.md#application-event

    MyInnerApp.on("initialize:after", function(){
      console.log("MyInnerApp initialize:after");  
    });
    
    MyInnerApp.on('start', function(){
      console.log("MyInnerApp start");  
    });
    

    http://jsfiddle.net/bryanbuchs/uMTnv/

    【讨论】:

    • 感谢 Bryan - 我应该提到我阅读了 doco :-) 但 initialize:after 事件是相关的。准备好文档似乎也没有关系,所以这个问题实际上是关于准备好文档的。我已经更新了小提琴以包括初始化:之后
    猜你喜欢
    • 2010-11-21
    • 2012-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多