为什么 JS 设计模式片段在 sublime 中不起作用

Why JS design pattern snippet not work in sublime

以下 sublime 代码段无效:

<snippet>
    <content><![CDATA[
        (function ($) {
            var defaults = {};

            function NAME(element, options) {
                this.config = $.extend({}, defaults, options);
                this.element = element;
                this.init();
            }

            NAME.prototype.init = function () {
            };

            $.fn.name = function (options) {
                new NAME(this.first(), options);
                return this.first();
            };
        }(jQuery));

]]></content>
    <!-- Optional: Set a tabTrigger to define how to trigger the snippet -->
    <tabTrigger>jqp</tabTrigger>
    <!-- Optional: Set a scope to limit where the snippet will trigger -->
    <!-- <scope>source.js</scope> -->
</snippet>

此外,如果有人能告诉我如何在代码段中使用自定义参数,那将很有帮助。

<snippet>
    <content><![CDATA[
(function ($) {
    var defaults = {};

    function ${1:name}(${2:element}, ${3:options}) {
        this.config = $.extend({}, ${2:defaults}, ${3:options});
        this.element = element;
        this.init();
    }

    ${1:NAME}.prototype.init = function () {
    };

    $.fn.${1:name} = function (options) {
        new ${1:NAME}(this.first(), options);
        return this.first();
    };
}(jQuery));
]]></content>
    <tabTrigger>jqp</tabTrigger>
    <scope>source.js</scope>
</snippet>

这应该可以解决问题。 $ 是一个特殊字符,所以你必须用 \ 来转义它。此外,我删除了额外的缩进并添加了制表位以允许自定义参数。您必须使用 ${#:PLACEHOLDERNAME} 符号在特定单词处创建制表位。您可以根据希望制表位的顺序将 # 替换为您的数字,并将 PLACEHOLDERNAME 替换为您希望占位符值表示的任何内容。您可以阅读有关 Sublime Text 片段的更多信息 here