6

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

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

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

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

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

4

2 に答える 2

6

この目的でsを使用することには客観的に問題はありませんBackbone.Modelが、それでも魚のように感じます。モデルには、「サービス」または「ユーティリティ」タイプのクラスに属さない追加の手荷物が付属しています。

代わりに、Backbone Model-View-Collection-Routerパラダイムに完全には適合しない機能のために、より一般的なイベントベースクラスを定義しました。

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;
});

extendこのクラスは、edが可能で、インスタンスにinitializeコンストラクターメソッドがあり、イベントをサポートするという点で、他のBackboneオブジェクトと同じように動作します。例の1つであるローカリゼーションサービスは、次のようになります。

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...
      }
    });
  }
});
于 2013-02-04T12:20:52.103 に答える
1

AddyOsmaniによる無料のbackbone.js電子ブック「DevelopingBackbone.jsApplications」があります:http: //addyosmani.github.com/backbone-fundamentals/

最初に、MVCとMV*に関する章があります。

後でrequirejsとAMDについての章もあります

于 2013-02-04T12:37:17.683 に答える