app.js ファイルをビルドするコーヒー トースター (ステッチ用の素晴らしい NPM モジュール) で coffeescript を使用してアプリを作成しています。
私のアプリケーション クラスとテンプレートの多くは現在のユーザーに関する情報を必要とするため、クラス User (Backbone.Model を拡張) のインスタンスをメインの Application クラス (Backbone.Router を拡張) のプロパティとして格納しています。
初期化ルーチンの一部として、サーバーからユーザーを取得します (認証、役割、アカウントの切り替えなどを処理します)。そのコーヒースクリプトは次のとおりです。
@user = new models.User
@user.fetch()
console.log(@user)
console.log(@user.get('email'))
最初のログ ステートメントは、正しい Backbone.Model 属性オブジェクトをコンソールに出力します。
User
_changing: false
_escapedAttributes: Object
_pending: Object
_previousAttributes: Object
_silent: Object
attributes: Object
account: Object
created_on: "1983-12-13 00:00:00"
email: "ben@accomplicecreative.com"
icon: "0"
id: "1"
last_login: "2012-06-07 02:31:38"
name: "Ben Ipsen"
roles: Object
__proto__: Object
changed: Object
cid: "c0"
id: "1"
__proto__: ctor
app.js:228
ただし、ログに記録されたときにモデル属性がコンソールに明確に存在するにもかかわらず、2番目は未定義を返します。
さらに面白いことに、コンソールに「window.app.user.get('email')」と入力すると、手動で「ben@accomplicecreative.com」の期待値が返されます...?
参考までに、initialize メソッドを app.js ファイルにコンパイルする方法を次に示します。
Application.prototype.initialize = function() {
var isMobile;
isMobile = navigator.userAgent.match(/(iPhone|iPod|iPad|Android|BlackBerry)/);
this.helpers = new views.DOMHelpers().initialize().setup_viewport(isMobile);
this.user = new models.User();
this.user.fetch();
console.log(this.user);
console.log(this.user.get('email'));
return this;
};
次のように、静的 HTML でアプリケーション コントローラーを初期化します。
jQuery(document).ready(function(){
window.app = new controllers.Application();
});
提案してください、ありがとうございます!