通过触发器实例化Backbone? (或者如何推迟执行匿名函数?)

时间:2011-10-14 06:33:01

标签: javascript backbone.js instantiation

继续我想要了解有关Backbone.js的更多信息我已经遇到了我想要以编程方式实例化Backbone应用程序的情况。这种情况发生在整个站点/页面不是Backbone应用程序的情况下,而是打开一个模态,然后填充(Backbone应用程序的基础结构),然后然后我想触发Backbone应用程序(在打开模式时也加载了JavaScript)。如果可能的话,我宁愿“手动”实例化Backbone应用程序,即在加载脚本时它不会自动执行。

我一直使用的典型Backbone格式是这样的:

var myApp = (function($) {

    var myModel = Backbone.Model.extend({
        ...
    });

    var modelInstance = new myModel({
        ...
    });        

    var myView = Backbone.View.extend({
        ...
    });

    var viewInstance = new myView({
        ...
    });

}

但是上面的内容是在加载脚本文件时自动执行的,然后实例化的视图会尝试绑定/呈现给它们关联的DOM元素等。有没有办法推迟执行匿名函数,以便我可以在准备模态时加载脚本,然后在[稍后]点触发命令Backbone app?

非常感谢您对此的任何见解。

1 个答案:

答案 0 :(得分:3)

您应该使用init方法将应用程序的组件放入对象中,然后可以在模式对话框打开时调用该方法。这是一个示例结构:

window.App = {
  Models: {},
  Views: {},
  Routers: {},
  init: function () {
    var app = new window.App.Routers.main;
    Backbone.History.start();
    return app;
  }
};

window.App.Models.Foo = Backbone.Model.extend({
  // ...
});

window.App.Views.FooView = Backbone.View.extend({
  // ...
});

window.App.Routers.main = Backbone.Router.extend({
  // ...
});

window.modalDialog.onOpen = function () {
  window.app = window.App.init();
};

以上假设您有一个名为modalDialog的全局变量代表您的模态窗口,在显示窗口时调用其onOpen回调。