2013-02-04 10 views
6

私は、現在、バックボーンをJavaScriptファイルを整理し、コードのクリーンな構造を作成する方法として検討しています。Backbone.jsユーティリティ

私の質問は主に「ベストプラクティス」の質問です。

ライブラリはうまく動作し、私はAMDとrequirejsで自分の構造を正常にセットアップしました。私の質問は、私が実行している2つのユーティリティファイルに関連しています。 1つはXMLドキュメントからデータを取得し、それをjsonデータオブジェクトに変換します(データをローカライズすることができます)。もう1つは、Facebookにロードして接続するユーティリティです。私はこれらの両方を「モデル」として作成しました。

おそらくこれらのモデルは、サービスに接続するときはおそらく「コントローラ」であるべきですが、ルータ(またはコントローラ)ファイルのハッシュバングを参照する必要はありません。

これらの2つのユーティリティファイルのバックボーンモデルを拡張する必要がありますか、またはこのようなユーティリティファイルを実装するために何か他にはありますか?

+0

大きな質問!これはまさに私が探していたものです。それは閉鎖されているばかげた。 – Kieveli

答えて

6

あり、この目的のためにBackbone.Model Sを使用したと間違って何も客観ませんが、関係なく、それは怪しい感じています。モデルには、「サービス」または「ユーティリティ」タイプのクラスに属さない余分な手荷物が付属しています。

代わりに、Backbone Model-View-Collection-Routerのパラダイムにはあまり合わない機能のために、より一般的な、イベントベースのクラスを定義しました。それはextend EDできることに

define(['backbone', 'underscore'], function(Backbone, _) { 

    var Class = function() { 
    this.initialize.apply(this, arguments); 
    }; 

    //give Class events and a default constructor 
    _.extend(Class.prototype, Backbone.Events, {initialize: function() {}}); 

    //copy the extend feature from one of the backbone classes 
    Class.extend = Backbone.Model.extend; 

    return Class; 
}); 

クラスは、他のバックボーンのオブジェクトと同じように動作し、そのインスタンスはinitializeコンストラクタメソッドを持っており、彼らがイベントをサポート。あなたの例の一つ、ローカリゼーションサービスは、のようになります:で http://addyosmani.github.com/backbone-fundamentals/

右:アディOsmaniによって 「BACKBONE.JSアプリケーションの開発」の無料BACKBONE.JSのebookがあり

var LocalizationService = Class.extend({ 
    initialize: function(url) { 
    this.url = url; 
    this.fetch(); 
    }, 

    fetch: function({ 
    var self = this; 
    $.ajax({ 
     url:this.url, 
     success: function(response) { 
     self.response = response; 
     self.trigger('fetch:complete', self, response); 
     //etc... 
     } 
    }); 
    } 
}); 
+0

これはまさに私が探していたものでした。どうもありがとう! :-) –