ractive.observe(' *')导致RangeError:超出最大调用堆栈大小

时间:2014-11-12 18:55:46

标签: ractivejs

基本上我有一个“父母 - 观点”视图,它接收一个装饰器,那个装饰者会创建另一个ractive-view,并观察所有的viewModelData,如果我使用view.observe('*')(带有一些特殊模板)语法)然后我收到一个错误。

我真的不知道如何在没有示例的情况下解释这个

(在Mac OS 10.10 Chrome 38.0.2125.111中测试)

  • 打开此链接:http://codepen.io/anon/pen/VYwLOp
  • 打开开发人员工具控制台
  • 点击“John Smith”
  • 在控制台中查看Uncaught RangeError: Maximum call stack size exceeded

如果您看到该示例,请继续阅读

避免看错的方法

(在示例的源代码中也提到了注释)

如果您不使用view.observe('*', callback)

完全或甚至使用空格分隔的名称来观察属性,而不是使用全局通配符*,即view.observe('prop1.* prop2 prop3.*'),不会发生错误。

如果你在这一行修改这一行,就不会发生错误,这行有什么问题O.o

(只看第一个括号)

    <div class="{{#if (karma * age) >= 1}}transparent-90{{else}}transparent 25{{/if}}">karma: {{karma}}, age: {{age}} </div>
    <div class="{{#if (karma + 1) >= 1}}transparent-90{{else}}transparent 25{{/if}}">karma: {{karma}}, age: {{age}} </div>
OR-TO(奇怪)
    <div class="{{#if (5 * age) >= 1}}transparent-90{{else}}transparent 25{{/if}}">karma: {{karma}}, age: {{age}} </div>

我最初的想法,结果证明是错的

(有些事情没有打破PatternObserver.update递归调用)

  • 从装饰者的范围到Ractive.defaults.data有一些循环引用,所以我删除了所有默认属性。

  • 父视图和装饰器视图之间的命名空间冲突,不,我更改了属性名称

1 个答案:

答案 0 :(得分:0)

潜在的ractivejs错误,同时,不要使用(a * b)进行乘法,请使用( a / (1/b) )

按照此主题https://github.com/ractivejs/ractive/issues/1472