CodeKit ツールを介して Coffeescript で Backbone.js を使用しています。
これまで、すべてを 1 つのファイルに含めてきました。しかし、私はそれらを分離し始めたいです。AMD と require.js に入る前に、簡単なことを試してみたかったのです。
たとえば、私はで提案されたことに従いたかった
Backbone.js: ビュー、コレクション、モデルを別々の js ファイルに分離すると、それらは相互に認識できませんでした
また、他の人が参照するJSファイルを「追加」(またはインポート)するオプションがあるCodeKitを使用しているため、これによりすべてが1つのファイルにうまく収まると思います。
だからここに私が達成したいことがあります。
- 別ファイル「View.coffee」内のViewファイル
- Routeファイルを別ファイル「App.coffee」に
そして、View ファイルを App.coffee に「インポート」して、CodeKit 経由ですべてを App.js にコンパイルします。
私の見解では、私は次のことを持っています
$ ->
class View extends Backbone.View
el:"#view"
initialize: =>
console.log app
私のコントローラーで私が持っている
$ ->
class App extends Backbone.Router
view : new View
routes:
"" : "home"
search: =>
console.log "hi"
app = new App
Backbone.history.start()
CodeKit で、"View.coffee" を "App.coffee" にインポートして、1 つのファイルにコンパイルしました。
実行すると、「ビュー」が定義されていません。
さて、ここでいろいろ組み合わせてみました。たとえば、「window.View」と「window.App」をグローバル名前空間に割り当てようとしましたが、うまくいきませんでした。App が View を読み取れるようにすることはできましたが、View が App を読み取ることができませんでした。
これを設定する最良の方法は何ですか? それとも私はそれを正しくやっていますか?また、最終的な JS 出力を添付します。
// Generated by CoffeeScript 1.3.1
(function() {
var __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; },
__hasProp = {}.hasOwnProperty,
__extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor; child.__super__ = parent.prototype; return child; };
$(function() {
var App, app;
App = (function(_super) {
__extends(App, _super);
function App() {
this.search = __bind(this.search, this);
return App.__super__.constructor.apply(this, arguments);
}
App.prototype.view = new View;
App.prototype.routes = {
"": "home"
};
App.prototype.search = function() {
return console.log("hi");
};
return App;
})(Backbone.Router);
app = new App;
return Backbone.history.start();
});
/* --------------------------------------------
Begin View.coffee
--------------------------------------------
*/
$(function() {
var View;
return View = (function(_super) {
__extends(View, _super);
function View() {
this.initialize = __bind(this.initialize, this);
return View.__super__.constructor.apply(this, arguments);
}
View.prototype.el = "#view";
View.prototype.initialize = function() {
return console.log(app);
};
return View;
})(Backbone.View);
});
}).call(this);