Tracker重新计算功能的例外情况

时间:2015-04-24 19:56:53

标签: meteor

我有一个模板帮助器,可以访问我的应用程序中的集合。但是我已经关闭了反应性:

Template.homeBoxGroupsTpl.helpers({
    boxes: function () {
        return Boxes.find({},
            {
                sort: {
                    order: 1
                },
                reactive: (Session.get("homeCanvasTplReactive") || false)
            }
        );
    }
});

在我的页面上插入一个新元素后,它会更新集合,Meteor会在浏览器控制台中抛出错误:

    Error: Exception from Tracker recompute function: reporters.js?1429904535194:67 
Error: Error: Bad index in range.getMember: 16
        at DOMRange.getMember (http://tidee-vm/packages/blaze.js?a5c324925e5f6e800a4c618d71caf2848b53bf51:586:11)
        at http://tidee-vm/packages/blaze.js?a5c324925e5f6e800a4c618d71caf2848b53bf51:2727:45
        at Object.Tracker.nonreactive (http://tidee-vm/packages/tracker.js?6d0890939291d9780f7e2607ee3af3e7f98a3d9c:593:12)
        at Object.Blaze.Each.eachView.onViewCreated.eachView.stopHandle.ObserveSequence.observe.changedAt (http://tidee-vm/packages/blaze.js?a5c324925e5f6e800a4c618d71caf2848b53bf51:2721:17)
        at http://tidee-vm/packages/observe-sequence.js?0532a9dd76dd78f543eb4d79a1e429df186d8bde:313:21
        at Function._.each._.forEach (http://tidee-vm/packages/underscore.js?0a80a8623e1b40b5df5a05582f288ddd586eaa18:164:22)
        at diffArray (http://tidee-vm/packages/observe-sequence.js?0532a9dd76dd78f543eb4d79a1e429df186d8bde:299:5)
        at http://tidee-vm/packages/observe-sequence.js?0532a9dd76dd78f543eb4d79a1e429df186d8bde:147:9
        at Object.Tracker.nonreactive (http://tidee-vm/packages/tracker.js?6d0890939291d9780f7e2607ee3af3e7f98a3d9c:593:12)
        at http://tidee-vm/packages/observe-sequence.js?0532a9dd76dd78f543eb4d79a1e429df186d8bde:121:15

有关如何调试此问题的任何想法,还是Meteor问题?

4 个答案:

答案 0 :(得分:0)

Meteor的错误消息在所有浏览器中都很糟糕,但是Chrome,因为Meteor希望堆栈跟踪包含错误消息,但这只能由Chrome完成。我讨厌这样说,但是在调试Meteor应用时你可能不得不使用Chrome。 :(

答案 1 :(得分:0)

我没有解决方案,但我也遇到了同样的错误,并且能够解决我的情况,所以发布它,希望它可以帮助你调试问题(虽然这似乎没有任何帮助)。原因是.length的使用。我有一个大型数组(数组名称:数据),为了缩短它(减少arrray的长度),我分配了data.length = 5,它以某种方式导致错误,并且流星助手没有按预期工作。 删除该行对我有用,我通过for循环完成了数组的缩短,并将前五个元素存储在另一个变量中。

答案 2 :(得分:0)

我也遇到过类似的问题:(

我能够通过为Tempaltes提供唯一的名称,以及.js文件和Helpers对象名称中相应的Mongo DataBase对象的方法来解决它。

希望它也适合你:)

答案 3 :(得分:0)

对于我来说,我在其中一个流星周期中发现ReactionProduct.selectedVariant()null时会收到此错误。

我刚刚处理了null案例:

if (ReactionProduct.selectedVariant() === null) {
  return;
}

它正在为我工​​作。