继续我想要了解有关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?
非常感谢您对此的任何见解。
答案 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
回调。