Ember无法读取属性'路径'的未定义

Ember Cannot read property 'path' of undefined

本文关键字:路径 未定义 属性 Ember 读取      更新时间:2023-09-26

我一直遇到这个错误,我很困惑为什么。我无法将开发工具中的错误追溯到我的主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无法读取未定义的属性"path",该属性看起来来自我的Ember.min.js文件。任何追踪此事的帮助都会很棒。

Codepen演示链接

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

未捕获类型错误:无法读取看起来由Ember.View.extend 抛出的未定义的属性"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链接也已更新以供审查。

Ember.View已弃用。请参阅有关编写助手的新文档。

然而,基于所描述的功能,并且由于您提供了一个模板,我怀疑您想要的是一个组件:

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

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

编辑到您的编辑2:请注意,现在不赞成在App上定义对象。