【问题标题】:Ember Cannot read property 'path' of undefinedEmber 无法读取未定义的属性“路径”
【发布时间】:2015-12-05 21:28:22
【问题描述】:

我一直遇到这个错误,我很困惑为什么。我无法将开发工具中的错误追溯到我的主 JS 文件中的任何内容。我的 Ember 相关代码如下:

  var App = Ember.Application.create();
  App.ApplicationRoute = Ember.Route.extend({
    model: function() {
      var url = 'http://www.json-generator.com/api/json/get/bMRERKrXfS';
      return Ember.$.getJSON(url).then(function(data) {
        model = {
          list1: data
        };
        return model;
      });
    }
  });

  Ember.Handlebars.helper('autocomplete', Ember.View.extend({
    templateName: 'controls/autocomplete',

    filteredList: function() {
      ...
      }

      return list.filter(function(item) {
        ...
      });
    }.property('list.@each', 'filter')
  }));

我已经从那里的结构中删除了特定于应用程序的代码。每当我尝试运行它时,我都会收到以下错误:

Ember 无法读取似乎来自我的 ember.min.js 文件的未定义属性“路径”。任何追踪此问题的帮助都会很棒。

Codepen Demo Link

编辑 在本地而不是在 CodePen 中运行此代码时,我最终会遇到以下错误:

Uncaught TypeError: Cannot read property 'extend' of undefined 这看起来是由 Ember.View.extend 抛出的

未捕获的类型错误:无法读取来自 ember.min 文件的未定义属性“isHelperFactory”

编辑 2 我尝试将帮助程序更新为 Ember 组件:

App.AutoCompleteComponent = Ember.Component.extend({
  filteredList: function() {
        var list = this.get('list'),
            filter = this.get('filter'),
            filterArr = [],
            filterArrLength;

        if (filter && filter.indexOf(', ') !== -1) {
            filterArr = filter.split(', ');
            filterArrLength = filterArr.length;
            filter = filterArr[filterArrLength - 1]
        }

        if (!filter || (filterArrLength > 0 && filterArr[filterArrLength - 1].length == 0)) {
            $("#filter-results").hide();
            INPUT.unbindKeys();
            return;
        } else {
            if (!$("#filter-results").is(":visible")) {
                INPUT.bindKeys();
                $("#filter-results").show();
            }
        }

        return list.filter(function(item) {
            if (!filterArrLength) {
                return item.title.toLowerCase().startsWith(filter);
            } else {
                return item.title.toLowerCase().startsWith(filterArr[filterArrLength - 1]);
            }
        });
    }.property('list.@each', 'filter')
});

我已将 Handlebars 模板更新为 "components/auto-complete"

不过,我收到了同样的错误。我的 CodePen 链接也已更新以供审核。

【问题讨论】:

    标签: javascript ember.js


    【解决方案1】:

    Ember.Viewdeprecated。请参阅有关编写 helpers 的新文档。

    但是基于所描述的功能,并且因为您提供了一个模板,我怀疑您想要的是 component

    // app/components/auto-complete.js
    
    import Ember from 'ember';
    
    export default Ember.Component.extend({ 
        filteredList: ...
    });
    

    Ember 会自动找到模板,在本例中为 templates/components/auto-complete.hbs

    编辑到您的编辑 2:请注意,现在已弃用在 App 上定义对象。

    【讨论】:

    • 谢谢,@andorov。我想即使在查看了帮助程序和组件之后,我仍然不确定如何更新它。我应该从帮助器开始但扩展组件而不是视图吗?我仍在尝试将头绕在 Ember 周围。
    • 这里根本不要使用帮助器——它们是用来干燥模板逻辑(不再有视图)。创建一个组件 - here 是关于它们的更长的教程。
    • 谢谢!我仍在努力写这篇文章,但这显然是需要做的,所以我将此标记为我的答案。现在只需要弄清楚如何写这个。
    • 我更新了我的答案。您使用的是哪个版本的 Ember?您的代码似乎来自旧版本
    猜你喜欢
    • 1970-01-01
    • 2014-07-28
    • 2018-08-18
    • 2015-11-22
    • 2014-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-29
    相关资源
    最近更新 更多