繁体   English   中英

如何重写dojo函数

[英]how to override dojo function

我想更正dojox / calendar / Calendar中星期数不正确的问题。 我知道要更改什么=> dojo / date / locale中的exports._getWeekOfYear函数

如果我将它放在js文件中,它会完美工作,但是,我不希望/无法修改dojo的文件。

我想应用在这里找到的优先解决方案:

http://g00glen00b.be/dojo-inheritance-overriding-extending/此处

没有任何成功,我得到一个SyntaxError:缺少:属性ID之后

与var obj = new export();

我上次尝试的代码:

require(["dojo/_base/lang", "dojo/date/locale"], function(lang, locale){
    lang.extend(locale, {
        var obj = new exports();
        obj._getWeekOfYear = function(/*Date*/ dateObject, /*Number*/ firstDayOfWeek){
            if(arguments.length == 1){ firstDayOfWeek = 0; }
            var determinedate = new Date();
            determinedate.setFullYear(dateObject.getFullYear(), dateObject.getMonth(), dateObject.getDate());
            var D = determinedate.getDay();
            if(D == firstDayOfWeek) D = 7;
            determinedate.setDate(determinedate.getDate() + (4 - D));
            var YN = determinedate.getFullYear();
            var ZBDoCY = Math.floor((determinedate.getTime() - new Date(YN, 0, 1, -6)) / 86400000);
            var WN = 1 + Math.floor(ZBDoCY / 7);
            return WN;
        };
    });
});

我试过了 :

exports._getWeekOfYear: function(...)    
exports._getWeekOfYear=: function(...)

有任何想法吗?

没有提供完整的解决方案,我注意到的第一件事是“ exports”不是可以使用new关键字实例化的类。 在该特定的dojo模块中,导出只是一个公开API的对象。

看一下SitePen上的解决方案,尤其是“ MonkeyPatching”是一种对我来说很好的机制。

谢谢

我终于设法用这段代码做我想要的

require(["dojo/date/locale"], function( local){

        local._getWeekOfYear= function(/*Date*/ dateObject, /*Number*/ firstDayOfWeek){
            if(arguments.length == 1){ firstDayOfWeek = 0; }
            var determinedate = new Date();
            determinedate.setFullYear(dateObject.getFullYear(), dateObject.getMonth(), dateObject.getDate());
            var D = determinedate.getDay();
            if(D == firstDayOfWeek) D = 7;
            determinedate.setDate(determinedate.getDate() + (4 - D));
            var YN = determinedate.getFullYear();
            var ZBDoCY = Math.floor((determinedate.getTime() - new Date(YN, 0, 1, -6)) / 86400000);
            var WN = 1 + Math.floor(ZBDoCY / 7);
            return WN;
        }
    ;
});

确实出口是铅。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM