我已经使用JSFiddle在Ember.JS中成功构建了一个小UI小部件。使用Ember数据夹具适配器工作正常,但我想将它带入本地环境,并认为我会使用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-js modules.export
和require
语句)在小提琴中工作。
非常感谢任何和所有帮助。
- = - = - = - = - UPDATE - = - = - = - = -
我在ActivitiesRoute的init
函数中添加了另一个调试行,它将App对象发送到控制台进行检查。我不是它应该看起来像什么的专家,但这感觉就像一个强有力的线索,因为本地安装声称Store是(unknown mixin)
但是当在JSBin中运行时,Store报告为App.Store
:
答案 0 :(得分:4)
好的,经过多次痛苦,我现在已经解决了这个问题。这主要归结为:
/vendor/scripts
我在下面的流程中遇到的更多有关如何通过和暂时性问题的详细信息:
/vendor/scripts
目录时 - 有两个Ember脚本(ember-latest和ember-1.0.rc.6)。具有讽刺意味的是,名为 rc.6 的实际上是 rc.5 版本,而ember-latest确实是 rc.6 。在任何一种情况下,有两个显然是在寻找麻烦。 vendor.js
中有一个余烬文件,但是在灰烬数据后编译了Ember config.coffee
文件确实管理了排序,但是当我注意到它指的是“rc.6”文件而不是“最新”文件时,所以它没有给出Ember和Ember之间所需顺序的指令。 -数据。哎呀。config.coffee
引用并且它有效。 cake getember
和cake getemberdata
。 getember
会创建一个名为ember-latest.js的文件,但原始文件是前面提到的ember-1.0.rc.6
文件。 我必须说我很高兴将这个问题排除在外。如果你还在读书,你可能会有兴趣知道我已经对我的分叉Brunch骨架进行了所有必要的修改。请注意,我的repo已经过修改,允许进行JavaScript
编码,而不是CoffeeScript
,我也改用LESS
处理器代替Stylus
。
答案 1 :(得分:1)
我看着回购。在控制台修修补补,给了我一些有趣的结果。
我在“存储已加载”日志后添加了以下日志。
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
属性和所有!!
我对此感到有些困惑,是不是模块加载器应该减轻这个?我没有看到任何其他明确的Store
作业。我的建议是探索早午餐需要loader
做什么,或者对作者提供帮助。