Javascript 为什么我在使用requireJS时需要插件?

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

我最近进入了一个新的行业,对此我很满意。但是为什么我需要加载我的把手模板?把手模板可以存储在一个html文件中,不涉及插件/转换过程。如果我想。。。我还可以使用jQuery/Ajax像这样加载它们:

$.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这与我的问题无关,但谢谢。