我已经看到了一些关于如何做到这一点的方法,但我永远无法弄清楚哪一种方法是“正确的”。引导一个主干应用程序
Jeffrey Way from NetTuts+和Addy Osmani实例化'主'应用程序视图以启动它们的应用程序。
require(['views/app'], function(AppView) {
new AppView();
});
Ryan Bates from Railscasts开始通过实例化一个路由器,然后处理后续请求他的申请:
window.App =
Models: {}
Collections: {}
Views: {}
Routers: {}
init: ->
new App.Router()
Backbone.history.start()
}
}
$(document).ready ->
App.init()
是否有自举应用程序的这两种方式之间的重要区别?
我很喜欢Ryan Bates如何创建一个App
对象,他附加了他的所有模型,视图......他使用CoffeeScript,但我不确定这是否会影响该对象的处理方式。我尝试这样做,我不能让它与RequireJS工作:
require(['jquery', 'backbone', 'router'], function ($, Backbone, Router) {
window.App = {
Models: {},
Collections: {},
Views: {},
Aggregator: _.extend({}, Backbone.Events),
Hook: $('#application'),
Router: Router,
init: function() {
new App.Router();
Backbone.history.start();
}
}
$(document)ready(function() {
App.init();
});
});
然后我有它创建索引时的路线被击中一个loginView一个简单的路由器:
define(['backbone', 'loginView'], function(Backbone, LoginView) {
var Router = Backbone.Router.extend({
routes: {
'': 'index'
},
index: function() {
var loginView = new LoginView();
}
});
return Router;
});
而且我loginView:
define(['backbone'], function(Backbone) {
var LoginView = Backbone.View.extend({
});
return LoginView;
});
要遵循工作的Ryan Bates的方式,我想这样做:
App.Views.LoginView = Backbone.View.extend({});
,但我不能肯定这是如何不同于他的CoffeeScript做什么:
class App.Views.LoginView extends Backbone.View
当我登录“应用”在我LoginView的initialize
方法控制台,我从我的主要获取对象.js文件,但是,当我尝试附加某些东西到App.Views对象时,它说App.Views是未定义的。一定在这里做错了什么?
我不认为require.js和Rails方法是兼容的。 Require.js想要用'define'调用中明确列出的依赖来处理事情,这大部分否定了对'window.App'的需求。 Rails的方式是通过资产管道把所有东西都放在一个大堆里,所以全局的'window.App'是必要的,以避免混乱。 AFAIK,你必须将'window.App'传递给'define'函数,就像你必须通过'Backbone'一样。我不是一个要求。尽管如此,我可能会失去一些明显的东西。 – 2013-02-24 17:21:15
谢谢。我仍然在学习使用Require.js,所以你说的话可能是正确的。我希望有人能够解决这个问题。 – cabaret 2013-02-24 17:31:02
不要相信我太多,但希望有些require.js人会一起澄清事情。顺便说一句,'App.Views.LoginView = Backbone.View.extend({});'和'类App.Views.LoginView扩展Backbone.View'在功能上是等价的。 – 2013-02-24 17:34:03