我遇到一些requireJS设置问题。我之前发过一个问题,但最新的范围现在改变了。
我有一些
requirejs.config({
paths: {
'tmpl': 'vendor/upload/tmpl.min'
}
});
require({
paths: {
'videoupload': 'vendor/upload/jquery.ui.videoupload'
}
}, ['js/main_video.js'], function (App) {
App.initial_video_upload();
});
最后在main_video.js
:
define(['tmpl', 'videoupload'], function () {
function initial_video_upload(tmpl, videoupload) {
'use strict';
$('#videoupload').videoupload({
//...some code
});
}
return{
initial_video_upload: initial_video_upload
}
}
);
如果我不使用requireJS(经典地加载每个文件),此代码可以正常工作。实际上,当触发此代码时,我会继续发送消息Uncaught TypeError: Object [object Object] has no method 'tmpl'
,此方法在tmpl.min.js
中定义。此方法在vendor/upload/jquery.ui.videoupload
中调用,如此
$.widget('videoupload', {
//...
_renderVideo: function (video) {
this._templateElement().tmpl({
id: video.id,
name: video.title
}).appendTo(this._listElement()).find(
this.options['delete-selector']
);
return this;
},
//...
我该如何管理? (我之前有过这个方法tmpl的错误超时消息,但它现在消失了,所以我不认为这是它)
答案 0 :(得分:0)
在配置对象中,路径不是JS文件的完整路径但是包含JS文件的目录的路径,因此您可能希望在main_video.js
文件中执行以下操作:
requirejs.config({
paths:{
'upload': 'vendor/upload'
}
});
define(['upload/tmpl','upload/jquery_videoupload'],function(tmpl, videoupload) {
function initial_video_upload(tmpl,videoupload){
'use strict';
$('#videoupload').videoupload({
//...some code
});
}
return{
initial_video_upload: initial_video_upload
}
}
);
在主应用程序中:
requirejs.config({
paths:{
'js': 'path/to/your/js/folder'
}
});
require(['js/main_video'], function(App) {
App.initial_video_upload();
});
答案 1 :(得分:0)
问题代码中存在问题,所以:
define(['tmpl', 'videoupload'], function () {
应该成为这个:
define(['tmpl', 'videoupload'], function (tmpl, videoupload) {
第一个没有将加载的依赖关系暴露给闭包函数的局部变量,所以这可能是一个问题,尽管从提供的代码来看它是否是唯一的问题并不是很清楚。
我还想提一下,如果您打算使用优化器,那么使用多个requre.js配置并不是一件好事。配置将被最后一个覆盖,所以实际上只有一个配置用于整个项目是一个好主意。
像这样:
requirejs.config({
paths: {
'tmpl': 'vendor/upload/tmpl.min',
'videoupload': 'vendor/upload/jquery.ui.videoupload'
}
});