gpt4 book ai didi

ember.js - 在 Ember 应用程序中找不到 DS.Store 实例化

转载 作者:行者123 更新时间:2023-12-02 05:58:02 26 4
gpt4 key购买 nike

我已经使用 JSFiddle 在 Ember.JS 中成功构建了一个小型 UI 小部件。与 Ember-data Fixture Adapter 配合使用效果很好,但我想将它带入本地环境,并认为我会使用 Brunch 为我构建环境。从那时起,我已经浪费了一整天的时间来让它工作,我希望有人能帮助我度过难关。我此时强烈怀疑,剩下的问题要么是命名空间问题,要么是 Brunch 为您做的 common-js 打包引起的排序问题。我对 common-js 很陌生,所以这可能只是缺乏理解……这是基本问题:

  • 当我运行应用程序并移至 activities 模板时,我收到了一个 Assertion failed: Your application does not have a 'Store' property defined 错误。

我的初始化文件是这样的:

// 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');

可以在这个 JSBin 中找到代码的工作示例——尽管没有 common-js 和 brunch:http://jsbin.com/oyosev/56/edit .在本地运行时,它会加载索引页面,并且可以在“hi”页面和索引之间来回导航而不会发生意外。当您 {{#linkTo}} 事件 View /模板/ Controller 时会发生问题。事件——当然——是唯一一个由模型支持的 View / Controller 。据我了解,流程从我的 ActivitiesRoute 开始:

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();
}

});

它成功地实例化了对象(如将在以下日志文​​件中看到的那样),但随后尝试加载 Activity 模型,这是它注意到的地方......嘿,你还没有定义商店。问题是......我们已经或至少我们已经尝试过。出于引用目的,这里是有助于讲述执行故事的控制台消息:

console log

首先要注意的是我们在初始化脚本中包含了以下行:require('stores/Fixtures'); 这应该导致存储在中的 DS.Store 的实例化App.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 方法应该在实例化时运行,但它从来没有这样做,所以看起来这里有问题,但我'我不知所措,无法解释 Fiddle 中使用的完全相同的语法(common-js modules.exportrequire 语句除外)。

我们将不胜感激任何帮助。

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

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

non-working local

enter image description here

最佳答案

好吧,经过千辛万苦,我现在已经解决了这个问题。这主要归结为:

  • /vendor/scripts 中的重复文件>

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

重复文件

  • 在查看 /vendor/scripts 目录时,我注意到有两个 Ember 脚本(ember-latest 和 ember-1.0.rc.6)。具有讽刺意味的是,名为 rc.6 的实际上是 rc.5 构建,而 ember-latest 确实是 rc.6。无论哪种情况,拥有两个显然都是自找麻烦。
  • 因为“ember-latest”文件是最新的,所以我使用它并删除了“rc.6”文件。
  • 这导致了一个暂时性错误:
    • 我现在在 vendor.js 中只有一个 ember 文件,但 Ember 是在 ember-data 之后编译的
    • 这称为 common-js 无法管理的各种依赖问题(因为它们在 app.js 文件中)
    • config.coffee 文件确实管理顺序,但就在那时我注意到它指的是“rc.6”文件而不是“最新”文件,因此有效地没有给出所需的指令Ember 和 Ember-Data 之间的排序。呜呜。
    • 虽然很容易修复,但我更改了 config.coffee 引用并且它起作用了。
  • 这很好,但是如何我首先得到了两个文件?
    • 好吧,我 fork 的 Brunch 骨架 (brunch-with-ember-reloaded) 有一个 Cakefile,它提供了一种方便的方法来下载最新的 ember 和 emberdata 文件:cake getembercake getemberdata.
    • Emberdata 很好,它创建了一个名为 ember-data-latest.js 的文件,这是该目录中 Ember-Data 的唯一命名约定。
    • 然而,
    • getember 创建了一个名为 ember-latest.js 的文件,但原始文件是上述 ember-1.0.rc.6 文件。
    • 因此,实际上,Cakefile 中的自动化导致了重复文件并且新下载的 Ember 代码不是Brunch 解决方案的目标,而是静态文件“rc.6”文件。

结语

我必须说我很高兴解决了这个问题。如果您仍在继续阅读,您可能有兴趣知道我已经对我的 fork Brunch 框架进行了所有必要的更改。请注意,我的 repo 已被修改为允许 JavaScript 编码而不是 CoffeeScript 并且我还切换到使用 LESS 处理器而不是手写笔

骨架:brunch-with-ember-sideloaded

关于ember.js - 在 Ember 应用程序中找不到 DS.Store 实例化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17703919/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com