繁体   English   中英

如果添加了帮助器的把手并导航到应用程序的主页,则会出现“ TypeError:链条未定义”

[英]“TypeError: chains is undefined ” when adding a handlebars if helper and navigating to homepage of app

我的Ember应用程序中有一个车把模板。

{{#if image}}
    <img src="{{unbound image}}" />
{{/if}}

if语句运行正常,但是在导航到首页时似乎正在中断。 当我回到索引路由时,会出现此错误。

TypeError: chains is undefined

ember.js (line 4177)
var chains = this._chains, node = chains[key];

当我在车把模板中删除if条件时。 我不再收到该错误,可以毫无问题地返回首页。

我正在使用Ember JS Beta 1.5.0-beta.2,Handblebars 1.3.0和jQuery 1.11.0。

如果有条件的话可以解决这个问题,这确实很奇怪,但是我花了几个小时试图缩小范围,这就是我得出的结论。

当{{if}}子句中的属性名称以大写字母开头时,我看到了相同的问题。

我认为以下问题讨论可能会说明根本原因https://github.com/emberjs/ember.js/issues/1493

sly7-7评论2年前

我认为这是因为在车把中使用大写名称可以搜索全局变量。 在编写Foo.Bar时,我认为把手试图解析名称空间Foo,然后解析类或属性Bar。

我也看到了相同的错误。 根据该线程的提示,我得出结论,它的确是来自具有大写键名的重新调整JSON模型。 就我而言,我返回的JSON如下所示:

{
    ClassName: "3rd Grade - Thompson",
    SubjectID: "20509",
    SubjectName: "English"
}

此JSON导致出现“链未定义”错误。 在定义模型的Ember路线中,我通过以下代码运行了返回的JSON,以使所有键值都变为小写:

App.GradesRoute = Ember.Route.extend({
    model: function(){
      var url = "https://URL-To-JSON-API";
      var grades = [];

      return Ember.$.getJSON(url).then(function(data){
        $.each(data, function(index, obj){
          var grade = {};
          $.each(obj, function(key, value){
            grade[key.toLowerCase()] = value;
          });
          grades.push(grade);
        });
        return grades;
      });
    }
});

然后在我的车把代码中,我将所有键名都切换为小写,如下所示:

<script type="text/x-handlebars" id="grades">
  {{#each grade in model}}
    <p>
      {{grade.classname}}
        {{#if grade.subjectid}}
          {{grade.subjectname}}
        {{/if}}
      {{grade.number}} / {{grade.letter}}
    </p>
 {{else}}
   <p>No grades posted</p>
 {{/each}}

它就像一个魅力。 希望这对某人有帮助。 我知道我花了好几个小时试图解决这个问题,希望我可以省去别人的麻烦。

您最有可能在{{if}}子句的名称空间中,因此它的行为有所不同。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM