你所显示的两条法典在何时和为何执行时有很大的不同。 两者并非相互排斥。 他们没有达到同样的目的。
JavaScript Modules
(function($) {
// Backbone code in here
})(jQuery);
这是一种“Java模块”模式,以立即援引功能加以实施。
该法典的目的是为你的法典提供“机动性”、“隐私和资本”。
执行这项职能由电话<编码>(jQuery)括号立即援引。 穿透母体是为了向全球变量提供当地范围。 这有助于减少对<代码><>$变量进行检索的间接费用,并在某些情况下使小型托管人能够更好地压缩/优化。
立即援引职能就立即执行。 职能定义一旦完成,职能即予履行。
jQuery s "DOMReady" function
这是“DOMReady”职能的主要部分:。 http://api.jquery.com/ready/。
$(function(){
// Backbone code in here
});
jQuery s "DOMReady" function executes when the DOM is ready to be manipulated by your JavaScript code.
Modules vs DOMReady In Backbone Code
它是在“高能红树”功能中界定你的后继器法的坏形式,有可能损害你的应用业绩。 直到OMD装满并准备被操纵为止,这项职能才没有被召唤。 这就是说,在你确定目标之前,你至少要等过一次再等到浏览器。
更可取的做法是,在OMReady职能之外界定你的后遗物体。 除其他外,我更愿意在贾瓦语模块模式内这样做,以便我能为我的法典提供资本和隐私。 我倾向于使用“再利用模块”模式(见上文第一个环节),以提供我在模块之外需要的参照标准。
By defining your objects outside of the DOMReady function, and providing some way to reference them, you are allowing the browser to get a head start on processing your JavaScript, potentially speeding up the user experience. It also makes the code more flexible as you can move things around without having to worry about creating more DOMREady functions when you do move things.
即便你在其他地方界定了背井离乡的物体,你仍有可能使用红树功能。 原因是,许多落后国家需要以某种方式操纵OM。 为此,你需要等到人力部准备就绪为止,因此,你需要利用人力司的职能,在确定申请后开始申请。
你们可以在网上找到这方面的大量例子,但在此,利用模块和OMRReady功能,非常基本地执行:
// Define "MyApp" as a revealing module
MyApp = (function(Backbone, $){
var View = Backbone.View.extend({
// do stuff here
});
return {
init: function(){
var view = new View();
$("#some-div").html(view.render().el);
}
};
})(Backbone, jQuery);
// Run "MyApp" in DOMReady
$(function(){
MyApp.init();
});