Ember.js Can';在Ember应用程序中找不到DS.Store实例化

Ember.js Can';在Ember应用程序中找不到DS.Store实例化,ember.js,commonjs,brunch,Ember.js,Commonjs,Brunch,我已经成功地使用JSFIDLE在Ember.JS中构建了一个小UI小部件。使用Ember数据装置适配器可以很好地工作,但我想将其应用到本地环境中,并认为我应该使用早午餐为自己构建环境。从那时起,我已经浪费了一整天的时间试图让它工作,我希望有人能帮助我克服这个困难。我现在强烈怀疑,剩下的问题要么是名称空间问题,要么是由Brunch为您提供的常见js包引起的排序问题。我对普通js很陌生,所以这可能只是一个简单的缺乏理解。。。以下是基本问题: 当我运行应用程序并移动到活动模板时,我得到一个断言失败:

我已经成功地使用JSFIDLE在Ember.JS中构建了一个小UI小部件。使用Ember数据装置适配器可以很好地工作,但我想将其应用到本地环境中,并认为我应该使用早午餐为自己构建环境。从那时起,我已经浪费了一整天的时间试图让它工作,我希望有人能帮助我克服这个困难。我现在强烈怀疑,剩下的问题要么是名称空间问题,要么是由Brunch为您提供的常见js包引起的排序问题。我对普通js很陌生,所以这可能只是一个简单的缺乏理解。。。以下是基本问题:

  • 当我运行应用程序并移动到
    活动
    模板时,我得到一个
    断言失败:您的应用程序没有定义“存储”属性
    错误
我的初始化文件如下所示:

// Namespace
App = require('app');
// ===== Router =====
App.Router.map(function() {
    this.resource('index', { path: '/' }, function() {});
    this.resource('activities', { path: '/activities' }, function() {});
    this.resource('hi', { path: '/hi' }, function() {});

});
// ===== Routes =====
require('routes/ActivitiesRoute');

// ===== Store =====
require('stores/Fixture');

// ===== Models =====
require('models/Activity');

// ===== Views =====

// ===== Controllers ===== 
require ('controllers/ActivitiesController');

// ===== Template Helpers =====
require('helpers/time');

// ===== Templates =====
require ('templates/application');
require ('templates/hi');
require ('templates/activities');
代码的一个工作示例——尽管没有常见的js和brunch——可以在以下JSBin中找到:。在本地运行时,它会加载索引页面,并可以在“hi”页面和索引之间来回导航,而不会发生意外。当您{{{#linkTo}}活动视图/模板/控制器时,就会出现问题。当然,活动是模型支持的唯一视图/控制器。据我所知,流程从我的活动路线开始:

App=require("app");

console.log("ActivitiesRoute file loaded");
module.exports = App.ActivitiesRoute = Ember.Route.extend({

    init: function() {
        console.log("ActivitesRoute instantiated!");
    },

    model: function() {
        return App.Activity.find();
    }

});
它成功地实例化了对象(如下面的日志文件所示),但随后尝试加载活动模型,这就是它注意到的。。。嘿,你还没有定义商店。问题是。。。我们已经或者至少已经尝试过了。以下控制台消息有助于讲述执行故事,仅供参考:

需要注意的第一件重要事情是,我们在初始化脚本中包含了以下行:
require('stores/Fixtures')这将导致存储在App.Store属性中的DS.Store的实例化。以下是Fixtures.js文件:

App = require("app");

console.log("Store file loaded");
module.exports = App.Store = DS.Store.extend({
    init:function() { console.log("Store instantiated!"); },
    revision: 13,
    adapter: DS.FixtureAdapter.create()
});
您可以在控制台日志(上面)中看到,确实加载了文件,但是
init
方法应该在实例化时运行,而且它从来没有这样做过。这里似乎有问题,但我无法解释它的确切语法(除了常见的js
模块。export
require
语句)正在运行

我们将非常感谢您的任何帮助

-=-=-=-=-更新-=-=-=-=-

我在ActivitiesRoute的
init
函数中添加了另一个调试行,该函数将App对象发送到控制台进行检查。我并不知道它应该是什么样子,但这感觉像是一个强有力的线索,因为本地安装声称该商店是
(未知混入)
但在JSBin中运行时,商店报告为
应用商店


我查看了回购协议。在控制台中进行修补,得到了一些有趣的结果

我在“存储加载”日志之后添加了以下日志

console.log("Store file loaded");
console.log('App.Store === App.Action', App.Store === App.Action);
module.exports = App.Store = DS.Store.extend({
  revision: 13,
  adapter: DS.FixtureAdapter.create()
});
它返回true!!由于某种我无法理解的原因,您的App.Store引用等于模型App.Action!!!它具有
FIXTURES
属性和所有


我对此有点困惑,难道模块加载器不应该减轻这一点吗?我没有看到任何其他明确的
存储
任务。我的建议是探索早午餐需要
加载器
做什么,或者让作者知道他可能能帮上忙。

好的,在经历了很多痛苦之后,我现在已经解决了这个问题。这是largely至:

  • /vendor/scripts
关于这是如何发生的以及我在以下过程中遇到的暂时性问题的更多详细信息:

重复文件
  • 在查看
    /vendor/scripts
    目录时,我注意到有两个Ember脚本(Ember-latest和Ember-1.0.rc.6)具有讽刺意味的是,一个名为rc.6的实际上是一个rc.5版本,而最新的余烬版本确实是rc.6。在这两种情况下,拥有两个显然是自找麻烦
  • 因为“ember-latest”文件更为新,所以我使用了它并删除了“rc.6”文件
  • 这会导致一个暂时性错误:
    • 我现在在
      vendor.js
      中只有一个余烬文件,但余烬是在余烬数据之后编译的
    • 这就产生了各种各样的依赖性问题,这些问题不是由公共js管理的(就像在app.js文件中一样)
    • config.coffee
      文件确实管理排序,但我注意到它引用的是“rc.6”文件,而不是“最新”文件,因此它没有给出关于Ember和Ember Data.Grrr之间所需排序的指示
    • 虽然很容易修复,但我更改了
      config.coffee
      引用,它成功了
  • 这很好,但是我是如何得到两个文件的呢?
    • 嗯,我分叉的早午餐骨架(重新加载灰烬的早午餐)有一个Cakefile,它提供了一种方便的方法来下拉最新的灰烬和灰烬数据文件:
      cake getember
      cake getemberdata
    • Emberdata很好,它创建了一个名为ember-data-latest.js的文件,这是该目录中ember数据的唯一命名约定
    • 然而,
      getember
      创建了一个名为ember-latest.js的文件,但原始文件是前面提到的
      ember-1.0.rc.6
      文件
    • 因此,实际上,Cakefile中的自动化导致了重复文件,新下载的Ember代码不是早午餐解决方案的目标,而是静态的“rc.6”文件
后记 我必须说,我很高兴解决了这个问题。如果你还在阅读,你可能有兴趣知道我已经对我的分叉Br进行了所有必要的更改