由于缺少方法而导致PanoJS失败

西莫

我在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产生undefinedin的结果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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

由于缺少库而导致构建失败

由于NULL而导致模拟方法失败

由于缺少方法而导致发布前报告失败(在com.google.android.apps.mtaas.crawler-1 / base.apk中)

尽管缺少堆栈ghci,但由于缺少包而导致堆栈构建失败

由于在特征上缺少方法,导致AbstractMethodError(库更新)

为什么由于缺少自定义本地存储库的apklib依赖关系而导致构建失败?

由于Lombok导致编译失败

由于Lombok导致编译失败

Doctest由于Unicode导致失败

由于 ModuleNotFoundError 导致 pytest 失败

由于颜色图中缺少元素而导致的 ValueError

将子对象转换为父对象-由于缺少方法而导致编译时错误-为什么?

由于缺少android SDK,Jenkins构建失败

由于缺少dx.jar,构建失败

由于“缺少图标”,Apple Watch提交失败

由于缺少模块'minizlib',npm启动失败

由于xsl:include而导致转换失败

由于Firebase分析导致Gradle失败

由于条件导致WiX构建失败

为什么由于验证而导致测试失败?

由于places.get(0);导致getPlaceById失败//无法解析方法get(int)

由于将比较方法添加到Array原型而导致测试失败。如何更新代码或测试?

iOS- 由于 pod 依赖文件中的方法名称过时而导致构建失败

由于缺少服务令牌,导致kube-scheduler发生CrashLoopBackOff

由于缺少VBA优化而导致Excel 2013溢出

由于缺少32位库,导致Steam无法启动

Snakemake:由于通配符扩展错误而导致“缺少输入文件”

由于缺少Domino JVM中的TLS密码套件,导致SSLHandshakeException

由于缺少本机扩展,导致安装时出现Nokogiri错误