我在Rails 4项目中使用PanoJS,但出现以下错误:
TypeError: this.getLevel(...) is undefined
[panojs/pyramid_imgcnv.js][1] Line 92
我感到困惑的是,该方法似乎只在上面几行声明了。
我将其作为PanoJS的一个问题提出,但我怀疑这仅仅是Rails和Javascript之间的配置错误。以前,我已经设置了它并与Rails 3项目一起工作。我使用了相同的JS文件,并以相同的顺序加载它们。我看不到有什么区别(Rails版本除外),但是一种版本有效,而另一种版本无效。
更新:
将该元素声明为(为简洁起见,我省略了数据部分);
%div{ id: "image_viewer", class: "viewer", data: {} }
JS应该使用以下coffeescript触发,但目前我已将其注释掉,因为它只会添加一个错误,因为addimagezoom无法正常工作。
jQuery(document).ready ($) ->
$('#zoomimage').addimagezoom
largeimage: $('#zoomimage').data('large-image-url'),
magnifiersize: [$('#zoomimage').data('scaled-x-dimension'),$('#zoomimage').data('scaled-y-dimension')],
zoomrange: [2, 10]
更新2:
我意识到我在原始帖子中犯了一个错误。触发实际上如下。以上是我尝试使其他查看器工作时的人工制品。下面是真正的触发器。
createViewer viewer, 'image_viewer', "#{url_base}/#{image_id}", "#{image_uuid}_", width, height, target_format
好的,这真的很难,因为无法看到所有代码正在运行。但是作为一个夏洛克想要,我可以看到:
该错误表明在this.getLevel(...)
file的第92行未定义的结果panojs/pyramid_imgcnv.js
。源文件指出:
ImgcnvPyramid.prototype.tile_filename = function( level, x_coordinate, y_coordinate ) {
var l = formatInt( this.getLevel(level).level , 3);
...
}
表示的值会level
产生undefined
in的结果getLevel()
。查看getLevel()
我们可以看到:
ImgcnvPyramid.prototype.getLevel = function( level ) {
if (level<this._pyramid.length)
return this._pyramid[ level ];
else
return this._pyramid[ this._pyramid.length-1 ];
}
因此level
是:
A.未定义,或
B.指向不存在的数组位置的负数,或
C.数组_pyramid中存储在该位置的值未定义
如果我们搜索该函数ImgcnvPyramid.tile_filename
被调用的任何实例,则可以看到在源代码中的其他任何地方都没有调用该函数。这意味着实现库的用户必须调用它。因此,让我们检查一下(并假设)您正在以与演示页面相同的方式实现插件。
该演示将覆盖该tileUrlProvider.assembleUrl
方法。当您要覆盖要使用的每个图块的url时,应实现此功能。在演示实现中,我们可以看到以下内容:
var myProvider = new PanoJS.TileUrlProvider('','','');
myProvider.assembleUrl = function(xIndex, yIndex, zoom) {
return MY_URL + '/' + MY_PREFIX + myPyramid.tile_filename( zoom, xIndex, yIndex );
}
如果我们遵循源代码中的结尾,则zoom
传递给用户定义的assembleUrl
方法的变量应该为undefined
或为负值,假设在加载时发生错误,则可能是错误地计算了缩放级别。有罪的行可能是:
PanoJS.js[88]
this.zoomLevel = (typeof options.initialZoom == 'undefined' ? -1 : parseInt(options.initialZoom));
根据此“分析”,这很有意义,因为返回的默认值为-1
。因此,总而言之,初始化全景图时请添加initialZoom值
viewer = new PanoJS(dom_id, {
initialZoom: 0, // and play with this value to see what happens
...
});
另外,检查触发器中width
和的值height
createViewer viewer, 'image_viewer', "#{url_base}/#{image_id}", "#{image_uuid}_", width, height, target_format
如果其中之一为负数,零或未定义,则可能会错误地计算缩放值。
抱歉,如此冗长,可能对其他人有帮助,希望对您有所帮助。请让我们知道这些建议是否有效,否则,请发布一个网址,以便我们查看代码的运行情况。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句