我在backbone.js项目中使用raphael.js。导入raphael就像一个魅力(这个版本符合AMD标准)。一切都按预期工作。 "应用"这是另一个app.js文件中定义的预定义全局对象。
定义([' jquery','下划线',' app',' backbone'' raphael' ] 功能($,_,app,Backbone,Raphael){
var AppView = Backbone.View.extend({
initialize: function() {
app.paper = Raphael(0, 0, app.w, app.h);
} ... })})
现在我的app.paper有拉斐尔的所有方法。真棒!
我刚刚在Raphael API中发现我可以使用Raphael.el和Raphael.fn添加我自己的预定义方法
initialize: function() {
app.paper = Raphael(0, 0, app.w, app.h);
Raphael.el.myfill = function(){
this.attr('fill', '90-#fff-#000');
}
app.paper.circle(x,y,r).myfill(); //it works! (Brilliant!)
}
}
我的问题是,如何将Raphael.el.myfill定义与其他Raphael.fn.mydefined方法一起放入另一个javascript文件并将其带入上面的AppView?
我不想使用冗长的定义堵塞我的AppView文件,而且我也希望提供关于我在不同视图中使用哪种Raphael。[el | fn]定义的可变性。但是由于这些对象构造函数已经是我已经作为依赖项引入的Raphael.js对象的一部分,我不确定如何使用require分离Raphael.el和Raphael.fn定义.js协议。在require.js之前,我会简单地将这些定义放在另一个myRaphaelDefs.js文件中,添加另一个"脚本"标记为我的HTML并且它们总是可用,但这是2015年,我已经跳上了模块化的js潮流。
我使用符合AMD标准的RedRaphael分支机构,因此我没有"定义" Raphael.js本身的包装。如果这个库带有这样的包装器,我可能会尝试将外包定义直接添加到Raphael.js作为依赖项。 (不是一个选项)RedRaphael开箱即用于require.js,所以没有"定义"在那里包装。
答案 0 :(得分:0)
我们所做的是在我们的库周围添加一个包装器并使用require.config中的map
选项进行路由,因此包装器获取原始库,但其他所有内容都会抛出包装器:
圣拉斐尔-wrapper.js:
define(['raphael'], function (Raphael) {
Raphael.el.myfill = function(){
this.attr('fill', '90-#fff-#000');
};
return Raphael;
});
require.config:
{
paths: {
'raphael': '/path/to/rahpael'
},
map: {
'*': {
'raphael': '/path/to/rahpael-wrapper'
},
'/path/to/rahpael-wrapper': {
'raphael': 'raphael'
}
}
}