何时在requirejs中使用填充程序

时间:2014-06-25 10:23:11

标签: knockout.js twitter-bootstrap-3 requirejs

我试图向bootstrap-datepicker添加一个自定义的淘汰赛绑定,并在模仿那个之前进入this question的解决方案而没有将它放入javascript asp包中我尝试添加引导程序以这种方式-datepicker.js到requirejs配置

requirejs.config({
    paths: {
        'text': '../Scripts/text',
        'durandal': '../Scripts/durandal',
        'plugins': '../Scripts/durandal/plugins',
        'transitions': '../Scripts/durandal/transitions',
        'bootstrap.datepicker': '../Scripts/bootstrap-datepicker'
    }
});

define('jquery', function () { return jQuery; });
define('knockout', ko);

之后,我可以在模块中添加自定义绑定,只需引用bootstrap.datepicker,就像这样

define(['jquery', 'bootstrap.datepicker'], function () {
    ko.bindingHandlers.datepicker = {
        init: function (element, valueAccessor, allBindingsAccessor) {
            //initialize datepicker with some optional options
            var options = allBindingsAccessor().datepickerOptions || {};
            $(element).datepicker(options).on("changeDate", function (ev) {
                var observable = valueAccessor();
                observable(ev.date);
            });
        },
        update: function (element, valueAccessor) {
            var value = ko.utils.unwrapObservable(valueAccessor());
            $(element).datepicker("setValue", value);
        }
    };
});

我迷失了为什么我不需要将它包装在amd模块中(如jquery或knockout所做的那样)或者在index.cshtml js包中,所以我的问题是什么时候需要一个垫片?我可以将其关注到其他图书馆吗?

由于

1 个答案:

答案 0 :(得分:1)

如果这对您有用,那么 bootstrap.datepicker 实际上是支持 AMD。对于那些直接支持AMD的库,在大多数情况下指定该库的路径然后在其他地方需要它就足够了。

当这些库具有自己的依赖关系(可能支持或不支持AMD)时,可能会出现并发症。这可能需要使用RequireJS的一些更深奥的功能。

当库没有返回RequireJS可以使用的对象时,使用填充程序。所以,我们必须 shim 或者鞋拔,把对象带到Require的空间。