Javascript 为什么我在使用requireJS时需要插件?
我最近进入了一个新的行业,对此我很满意。但是为什么我需要加载我的把手模板?把手模板可以存储在一个html文件中,不涉及插件/转换过程。如果我想。。。我还可以使用jQuery/Ajax像这样加载它们:Javascript 为什么我在使用requireJS时需要插件?,javascript,requirejs,handlebars.js,Javascript,Requirejs,Handlebars.js,我最近进入了一个新的行业,对此我很满意。但是为什么我需要加载我的把手模板?把手模板可以存储在一个html文件中,不涉及插件/转换过程。如果我想。。。我还可以使用jQuery/Ajax像这样加载它们: $.ajax({ url: '../templates/description.hbs', dataType: 'html', cache: false, success: function(data, status, response) { var
$.ajax({
url: '../templates/description.hbs',
dataType: 'html',
cache: false,
success: function(data, status, response) {
var template = Handlebars.compile(response.responseText);
$('#content').prepend(template(tmplData.description));
}
});
我正在寻找一种方法来加载我的templates.hbs文件需要(或可能不需要),而不使用插件。我不喜欢上面的ajax方法,因为它会降低页面加载速度
My templates.hbs文件如下所示:
<div class="description">
<h1>{{h1}}</h1>
<p>{{p}}</p>
</div>
{{h1}}
{{p}
只是一个字符串,对吗?回答您文章标题中的问题(“为什么我需要插件…”),而不是正文中的问题(“我正在寻找加载模板的方法…”)。也许其他人会来为这一部分提供答案
正如您所说,您不需要插件来加载模板,即使您在依赖关系管理的其余部分使用RequireJS。但是,使用或专用把手插件(如您链接的插件)会有帮助的原因有两个:
1-处理文本依赖项与处理其他依赖项相同
有一个插件可以让你说一段给定的代码取决于模块a、模块B和模板X:
require(["moduleA", "moduleB", "text!templateX.html"],
function(moduleA, moduleB, html) {
// start working with all of it together
}
);
但如果你不使用插件,你可能会有另一层回调:
require(["moduleA", "moduleB"],
function(moduleA, moduleB) {
$.ajax({
url: '../templates/templateX.html',
dataType: 'html',
cache: false,
success: function(data, status, response) {
// now do something
}
});
}
);
2-允许捆绑/优化阶段
RequireJS随附,它可以将所有依赖项捆绑在一起,并缩小它们,以减少请求数量和总体下载大小
如果使用插件和require/define语法定义所有依赖项,r.js可以跟踪模块所需的内容并将其捆绑在一起。因此,在我上面使用的示例中:
require(["moduleA", "moduleB", "text!templateX.html"],
moduleA、moduleB和templateX可以捆绑在一个文件中,而不是有三个单独的运行时请求
在你链接的Handlebar插件中,我看到400多行代码中的一些正在处理捆绑/优化阶段。正如@Esailija在评论中指出的,其他许多代码都与边缘情况和错误条件有关。您的代码只处理成功案例(并且依赖于20 KLOC jQuery),95%的代码不是针对成功案例,而是针对错误案例。@Esailija我真的从未体验过您所说的。为什么如此关注错误案例,我的错误案例是(不显示任何内容)或(我们缺少___;,转到这里)。如果你使用一个库,因为库中发生了一些错误而只得到一个白色页面,那么问题会很容易找到吗?哦,即使对于普通用户,如果他们有问题,您希望他们告诉您,在使用您的应用程序时,他们只看到一个白色页面,显示任何类型的错误。@Esailija这与我的问题无关,但谢谢。