我已经使用 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
方法应该在实例化时运行并且它从不这样做,所以这里似乎有问题,但我无法解释它的相同之处确切的语法(除了 common-jsmodules.export
和require
语句)在 Fiddle 中工作。
任何和所有的帮助将不胜感激。
-=-=-=-=- 更新 -=-=-=-=-
我在init
ActivitiesRoute 的函数中添加了另一个调试行,它将 App 对象发送到控制台进行检查。我不是它应该是什么样子的专家,但这感觉像是一个强有力的线索,因为本地安装声称 Store 是 a(unknown mixin)
但是在 JSBin 中运行时 Store 报告为App.Store
: