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 とブランチはありませんが) は、この 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-jsmodules.export
とrequire
ステートメントを除く) が機能します。
ありとあらゆる助けをいただければ幸いです。
-=-=-=-=- 更新 -=-=-=-=-
init
検査のために App オブジェクトをコンソールに送信する ActivityRouteの関数に、別のデバッグ行を追加しました。私はそれがどのように見えるべきかについての専門家ではありませんが、これは強力な手がかりのように感じます。なぜなら、ローカルのインストールでは Store が であると主張して(unknown mixin)
いるからですApp.Store
。