通过触发器实例化主干?(或者如何延迟匿名函数的执行?)



继续我对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元素,等等。是否有一种方法可以推迟匿名函数的执行,以便我可以在模态准备时加载脚本,但随后在[稍微]晚一点触发骨干应用程序的命令?

你应该用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回调。

最新更新