【发布时间】:2013-08-18 03:41:29
【问题描述】:
RequireJS 新手在这里。尝试转换一些 JQuery 代码,我以旧方式工作正常,可以使用 RequireJS。
我的页面页眉通过脚本标签加载三个 JS 文件——require.js 本身、我的 require.cfg.js 和具有站点特定功能的 boot/main.js。
相关 require.cfg.js 摘录:
,paths: {
'boot': 'src/boot'
,'jquery': 'lib/jquery.min'
,'jquery.masonry': 'lib/plugins/masonry.pkgd.min'
,'jquery.imagesloaded': 'lib/plugins/imagesloaded.pkgd.min'
}
,shim: {
'jquery': {
exports: 'jQuery'
}
,'jquery.masonry': ['jquery']
,'jquery.imagesloaded': ['jquery']
}
boot/main.js:
require([
'jquery',
'jquery.masonry',
'jquery.imagesloaded',
], function($) {
// The following code worked just fine when I included it in the header of the page as-is
$(function() {
var $container = $('#container');
// This doesn't work
$container.imagesLoaded(function() {
// Neither does this
$('#container').masonry({itemSelector : '.item',});
});
});
});
我可以确认浏览器正在找到并加载所有这些 JS 文件。我确认如果我这样做:
require([
'jquery',
'jquery.masonry',
'jquery.imagesloaded',
], function($, Masonry, ImagesLoad) {
Masonry 和 ImagesLoaded 变量设置正确......但我不想在没有 jQuery 的情况下继续
但是当我尝试在 JQuery 容器对象上调用 .imagesLoaded() 和 .masonry() 时,我得到:
Uncaught TypeError: Object [object Object] has no method 'imagesLoaded'
如果我注释掉 imagesLoaded 行,我会得到:
Uncaught TypeError: Object [object Object] has no method 'masonry'
不确定我在这里做错了什么......?从我在其他 StackOverflow 问题中读到的内容来看,代码对我来说看起来是正确的......?
谢谢!
更新:
如果我像这样以非 JQuery 方式使用此代码,它可以工作:
var container = document.querySelector('#container');
imagesLoaded(container, function() {
var msnry = new Masonry( container, {
itemSelector: '.item',
});
});
【问题讨论】:
-
你有这个运行的任何测试位置吗?
-
嗯,在本地。 :-) 我会把一些东西放在一起......
-
请参阅reliqry.com/test。我试图去掉所有无关的东西......可能我在这样做时引入了一些其他错误......谢谢你看!
-
您找到解决方案了吗?遇到同样的问题!
-
唉,不。我最终重写了代码以使用非 JQuery 方式工作。我会更新我的问题以显示我做了什么。
标签: jquery requirejs jquery-masonry