找不到变量:Ember CLI 中的 DS

Posted

技术标签:

【中文标题】找不到变量:Ember CLI 中的 DS【英文标题】:Can't find variable: DS in Ember CLI 【发布时间】:2015-02-12 12:25:51 【问题描述】:

TL;DR - Ember Data 在运行 Ember.js v1.9.0 的基本 Ember CLI 应用程序中不起作用

我对 Ember 和 Ember CLI 不太熟悉/不是很新,我刚刚创建了一个新项目来试用 Ember.js 的 1.9.0 版本,这是一个链接:http://emberjs.com/blog/2014/12/08/ember-1-9-0-released.html

我在我的应用程序中处于某个点(我承认不是很深),我正在设置 FIXTURES 来测试一些数据,但后来发生了这种情况:

控制台

Error while processing route: dashboard.index Cannot read property 'find' of undefined TypeError: Cannot read property 'find' of undefined
    at __exports__.default.Ember.Route.extend.model (focus-haven/routes/dashboard.js:9:24)
    at EmberObject.extend.deserialize (http://0.0.0.0:4200/assets/vendor.js:38356:21)
    at applyHook (http://0.0.0.0:4200/assets/vendor.js:61082:30)
    at Object.HandlerInfo.runSharedModelHook (http://0.0.0.0:4200/assets/vendor.js:59103:22)
    at Object.subclass.getModel (http://0.0.0.0:4200/assets/vendor.js:59329:21)
    at http://0.0.0.0:4200/assets/vendor.js:60956:19
    at tryCatch (http://0.0.0.0:4200/assets/vendor.js:61405:16)
    at invokeCallback (http://0.0.0.0:4200/assets/vendor.js:61417:17)
    at publish (http://0.0.0.0:4200/assets/vendor.js:61388:11)
    at http://0.0.0.0:4200/assets/vendor.js:42960:9

在做了一些调查和运行 ember 测试之后,我得到了这个:

not ok 14 PhantomJS 1.9 - ApplicationAdapter: it exists
    ---
        actual: >
            null
        message: >
            Setup failed on it exists: Can't find variable: DS
        Log: >
    ...
not ok 15 PhantomJS 1.9 - Dashboard: it exists
    ---
        actual: >
            null
        message: >
            Setup failed on it exists: Can't find variable: DS
        Log: >
    ...
not ok 16 PhantomJS 1.9 - Task: it exists
    ---
        actual: >
            null
        message: >
            Setup failed on it exists: Can't find variable: DS
        Log: >
    ...

...我在控制台中找到了这个:

DEBUG: -------------------------------
DEBUG: Ember      : 1.9.0
DEBUG: Handlebars : 2.0.0
DEBUG: jQuery     : 1.11.1
DEBUG: -------------------------------

我可能错了,但我认为 Ember 数据没有被加载或导入或其他什么,所以我花了大部分时间试图解决这个问题,但没有骰子。

我尝试过的事情:

按照本指南:http://www.cubicleapps.com/articles/todo-mvc-with-ember-cli-part-2 同时阅读 ember cli 和 ember.js api 文档/指南 通过 bower 重新安装 ember-data:bower install ember-data 尝试对 *** 上的类似问题实施解决方案,但无济于事 删除项目并运行 ember 新项目(我做了 3 次) 注意:在上一个项目中,控制台给了我不同的错误,但我解决了这些问题。应用程序开始按预期运行,但在我退出并再次运行 ember serve 后,此问题开头所述的控制台错误再次出现,现在我回到原点。便便。

解决方案可能很明显,但在大量运行更多测试和搜索网络之后,我什至无法找到解决方案。所以,是的,我有点累了,希望有一双新的眼睛能发现确凿的证据。

相关文件包括:

适配器/application.js

import DS from 'ember-data';

export default DS.FixtureAdapter.extend();

models/task.js

import DS from 'ember-data';

var Task = DS.Model.extend(
  group: DS.attr('string'),
  kind: DS.attr('string'),
  body: DS.attr('string'),
  isCompleted: DS.attr('boolean')
);

Task.reopenClass(
    FIXTURES: [
        
            id: 1,
            group: 'test',
            kind: 'project',
            body: 'whatever',
            isCompleted: false
        ,
        
            id: 2,
            group: 'test',
            kind: 'homwork',
            body: 'lol what nope',
            isCompleted: false
        
    ]
);

export default DS.Store.extend(
    adapter: 'DS.FixtureAdapter'
);
export default Task;

routes/dashboard.js

import Ember from 'ember';

export default Ember.Route.extend(
    model: function() 
        return this.store.find('task');
    
);

dashboard.hbs

#each task in model
    <p>task.group</p>
    <p>task.kind</p>
    <p>task.body</p>
    <p>task.isCompleted</p>
/each

bower.json


  "name": "focus-haven",
  "dependencies": 
    "handlebars": "2.0.0",
    "jquery": "^1.11.1",
    "ember": "1.9.0",
    "ember-data": "~1.0.0-beta.12",
    "ember-resolver": "~0.1.10",
    "loader.js": "stefanpenner/loader.js#1.0.1",
    "ember-cli-shims": "stefanpenner/ember-cli-shims#0.0.3",
    "ember-cli-test-loader": "rwjblue/ember-cli-test-loader#0.0.4",
    "ember-load-initializers": "stefanpenner/ember-load-initializers#0.0.2",
    "ember-qunit": "0.1.8",
    "ember-qunit-notifications": "0.0.4",
    "qunit": "~1.15.0"
  ,
  "resolutions": 
    "handlebars": "2.0.0",
    "ember": ">=1.4 <2",
    "ember-data": "~1.0.0-beta.7"
  

【问题讨论】:

尝试通过运行bower cache clean然后ember new &lt;your-project-name&gt;来清理凉亭缓存 我注意到 100% 肯定,但你可以尝试从 models/task.js 中删除你的export default DS.Store.extend ....,因为默认情况下设置一个application 适配器将使用夹具。顺便说一句,我不确定您可以在单个 js 文件中双重导出 我运行了bower cache clean,然后创建了一个新项目。我现在工作正常,但我想指出,在这个项目中,我使用的是 Ember.js v1.8.1 而不是 Ember.js v1.9.0。 我'我将通过执行bower install ember 然后关注these instructions 将项目升级到1.9.0。我会立即添加一条评论,让你们知道它是否仍然有效。 我实际上必须使用additional set of instructions 来完成这项工作(减去使用ember#canary 部分)...如果我确认它保持稳定,那么我'将很快发布我的解决方案,以便其他人可以看到。 你肯定想要export default DS.Store.extend。请看this section in the docs on adapters 【参考方案1】:

我实际上能够查明问题的原因,但首先让我谈谈我是如何让 Ember v1.9.0 使用 Ember CLI 运行的。

在 Ember CLI 项目中安装最新版本的 Ember JS

这就是我更新运行Ember CLI v0.1.4的项目以使用Ember.js v1.9.0的方式 (我希望得到某种确认,以确保这是更新 Ember CLI 应用程序的有效方法,以免误导正在阅读此问题的其他人

npm uninstall --save-dev broccoli-ember-hbs-template-compiler
npm install --save-dev ember-cli-htmlbars
rm -rf bower_components
bower install --save handlebars#2.0.0
bower install --save ember

此特定问题的部分解决方案

就我而言,问题的真正罪魁祸首是一个名为 ember-cli-bootstrap-sass 的 Ember 插件。每当我安装它时,就会出现问题,当我npn uninstall-ed 并将它从我的 package.json 的“devDependencies”中删除时,这个问题就消失了。

我不知道为什么会这样的实际细节,但我相信这可能与此插件的依赖关系与 Handlebars v1.x (?)以及 Ember 对新的 HTMLbars 编译器/Handlebars v2.0.0 (?) 的依赖。我在这里可能完全错了。

参考文献:

https://github.com/ember-addons/bootstrap-for-ember/issues/193

但现在我不会使用这个插件,我会调查其他 Ember 插件是否重复相同的问题。

PS:我没有测试或调查过 Ember.js v1.8.1 是否会出现此问题

我还是一个网络开发新手,所以任何与此类问题相关的输入或要点都会很棒! :D

【讨论】:

另一个“参考”github.com/unionups/ember-cli-bootstrap-sass/issues/11

以上是关于找不到变量:Ember CLI 中的 DS的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Ember.js 验收测试中调试“找不到模块”?

在 AWS 上找不到 404

Ember 服务不起作用(错误:找不到预设“es2015”)

ember 模板找不到我的自定义助手

我怎么知道,哪个 ember 插件版本与 ember-cli 或节点版本兼容

如何在 ember-cli 中导入 amd 模块?