Javascript 你能为YUI模块提供补丁吗?
在YUI3中,是否可以覆盖来自Javascript 你能为YUI模块提供补丁吗?,javascript,yui,yui3,Javascript,Yui,Yui3,在YUI3中,是否可以覆盖来自节点模块等的方法?例如,我想做这样的事情: Y.Node.prototype.get = function () { // Do some stuff then call the original function }; 如果Y是全局可用的YUI实例,我认为它是由库创建的,那么这就非常有效(正如您所期望的)。当您使用模块加载器并传递回调时,它不起作用: YUI().use("*", function (DifferentY) { Different
节点
模块等的方法?例如,我想做这样的事情:
Y.Node.prototype.get = function () {
// Do some stuff then call the original function
};
如果Y
是全局可用的YUI实例,我认为它是由库创建的,那么这就非常有效(正如您所期望的)。当您使用模块加载器并传递回调时,它不起作用:
YUI().use("*", function (DifferentY) {
DifferentY.Node.prototype.get === Y.Node.prototype.get; // false
});
我花了一段时间挖掘YUI源代码,但到目前为止,还没有弄清楚上一个示例中的differentity
是在哪里以及如何创建的(通过扩展,在哪里创建differentity.Node
)
我以前从未使用过YUI,所以可能是我用了完全错误的方法来处理这个问题。好吧,如果我看这个例子,似乎对Y有误解。在YUI 3中,每件事都是沙盒,因此可以同时运行多个YUI实例。Y不是全局变量,它将在调用YUI()时实例化。请使用方法,并且仅存在于该函数中。这就是为什么在《圣经》中只存在差异,而不存在Y
YUI().use('node', 'event', function (Y) {
// The Node and Event modules are loaded and ready to use.
// Y exists in here...
});
因此,如果您想“从外部”增强YUI,我将以YUI的模块策略为基础,使用YUI.add()创建一个YUI模块
让开发人员将增强作为一个模块加载(他将如何使用yui3)
对于全局YUI对象如何工作的解释,此概述可能会有所帮助:这里是monkey patching技术的使用示例 在此处查看控制台输出: 当然,没有必要使用
YUI.GlobalConfig
此外,在YUI
config中使用组
()也很方便
groups : {
patches : {
modules : {
/* Define your mp modules here */
}
}
}
谢谢,这绝对有道理。让我困惑的是
YUI
实例在use
回调之外的明显可用性:@JamesAllardice YUI对象是全局的(它既是一个对象又是一个函数),但YUI的每个实例都被分配给Y变量,该变量被传递给函数,该函数是.use语句的最后一个参数。Y实例只分配了您在.use调用中指定的模块。@Kris-在我链接到的fiddle中有一个全局可用的Y
对象,它似乎是YUI
的实例。如果您打算使用use
调用,那么这是从哪里来的,又有什么意义呢?@James Y对象是由JSFiddle创建的,它将您的所有YUI代码封装在Y.use('node',function(Y){…})中;
YUI().use('node-enhancement'), function(Y) {
// just use YUI as allways
});
YUI.add('node-custom-module', function(Y){
console.warn('Override Y.Node');
Y.Node.YOUR_NODE = 'custom Node';
});
YUI.add('widget-custom-module', function(Y){
console.warn('Override Y.Widget');
Y.Widget.YOUR_WIDGET = 'custom Widget';
});
YUI.GlobalConfig = {
modules : {
'node-custom-module' : {
condition : {
name : 'node-custom-module',
trigger : 'node',
test : function(){
return true;
}
}
},
'widget-custom-module' : {
condition : {
name : 'widget-custom-module',
trigger : 'widget',
test : function(){
return true;
}
}
}
}
};
YUI().use('node', function(Y) {
console.group('Node');
console.log('Y.Node.YOUR_NODE : ', Y.Node.YOUR_NODE);
console.groupEnd('Node');
});
YUI().use('widget', function(Y) {
console.group('Widget');
console.log('Y.Node.YOUR_NODE : ', Y.Node.YOUR_NODE);
console.log('Y.Widget.YOUR_WIDGET : ', Y.Widget.YOUR_WIDGET);
console.groupEnd('Widget');
});
groups : {
patches : {
modules : {
/* Define your mp modules here */
}
}
}