【发布时间】:2013-07-16 05:59:55
【问题描述】:
我已经使用 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');
代码的工作示例——尽管没有 common-js 和 brunch——可以在这个 JSBin 中找到:http://jsbin.com/oyosev/56/edit。在本地运行时,它会加载索引页面,并且可以在“hi”页面和索引之间来回导航而不会发生意外。当您 {{#linkTo}} 活动视图/模板/控制器时会出现问题。活动——当然——是唯一由模型支持的视图/控制器。据我了解,流程从我的 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 模型,这就是它注意到的地方……嘿,你还没有定义 Store。问题是......我们已经或至少我们已经尝试过。以下是有助于讲述执行故事的控制台消息,仅供参考:
首先要注意的是,我们在初始化脚本中包含了这一行: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 方法应该在实例化时运行,但它永远不会这样做,所以这里似乎有问题,但我不知所措解释它在 Fiddle 中的相同语法(除了 common-js modules.export 和 require 语句)在 Fiddle 中起作用。
我们将不胜感激。
-=-=-=-=- 更新 -=-=-=-=-
我在ActivitiesRoute 的init 函数中添加了另一个调试行,它将App 对象发送到控制台进行检查。我不是它应该是什么样子的专家,但这感觉像是一个强有力的线索,因为本地安装声称 Store 是 (unknown mixin),但是在 JSBin 中运行时,Store 报告是 App.Store:
【问题讨论】:
-
注意:我确实注意到通过将我的
init函数添加到 DS.Store.extend() 它在我的 Fiddle 中创建了错误,所以我已经从两者中删除了它但上面讨论的错误仍然存在不变。 -
我正要说在你的初始化中调用
this._super.apply(this, arguments)。 :) -
没有 jsbin 很难调试。否则,请尝试在线将生成的/连接的(非缩小的).js 发布到 gist 中。
-
我已经在 JSFiddle 中包含了工作代码(JSBin 过去几天真的很不稳定):fiddle 但我假设你想要早午餐格式的所有文件......这是一个 github repo我用所有代码创建:ember-hello
-
添加答案,cmets 不允许换行。