2

ユーザーが作成した予定のモデルとビューがあります。スタッフが「公式」の予定を作成する機能を追加しています。これらの予定には追加のオプションとイベントがありますが、ほとんどの場合、予定モデルには同様の属性(日付、場所、クライアント)があります。

私がやりたいのは、すべての予定を処理し、パラメーターを渡して、ユーザーまたはスタッフが予定を作成したかどうかに応じてデフォルトの属性を作成する単一のモデルを作成することです。

これは予定を整理するためのクリーンな方法ですか、それとも予定の種類ごとに別々のモデルを用意する必要がありますか?

4

3 に答える 3

2

Appointmentこれは、既存のモデルを拡張したい場所のように聞こえます。作成者に基づいて異なる属性を設定するだけではいけません。

var Appointment= Appointment.Model.extend({
     ...
});

var UserAppointment = Appointment.extend({
     ...
});

var StaffAppointment = Appointment.extend({
     ...
});
于 2012-08-03T16:18:47.227 に答える
1

クラス図を作成することは、オブジェクトに関して何をしなければならないかを特定するのに本当に役立つことを常に知っています。あなたの場合、私が想像しているのは、さまざまなタイプの予定のサブクラスを持つメインの予定クラスです。簡単なUMLクラス図表現は次のとおりです。

任命のクラス図

これは些細なことのように思えるかもしれませんが、これを実行すると、親クラスに配置できるクラス間の共通点を特定し、何かを見逃した場合にサブクラスに大量のコードを記述しないようにするのに役立ちます。興味のある方は、astah*コミュニティ版をご覧ください。それは無料でとても使いやすいです。

于 2012-08-03T17:11:01.740 に答える
1

複数のアポイントメントモデルの問題は、オブジェクト指向の観点からクリーンであるという点です。異なるモデルを同じコレクションに配置することはできないため、実用的ではありません(コレクションは1つのモデルクラスのモデルを格納するだけです)。

異なる予定タイプの数が限られている場合は、1つの予定モデルを用意し、それがどのタイプのモデルであるかを定義するtype属性を追加することをお勧めします。次に、このメソッドを使用して、次のようなアンダースコア関数initializeを使用してデフォルトを設定できます。_.defaults()

initialize: function(){
  var defaults;

  switch(this.get("type"){
  case "USER":
    defaults = {...};
    break;
  case "STAFF":
    defaults = {...};
    break;
  case default:
    defaults = {};
  };

  _.defaults(this.attributes, defaults); // this doesn't use the set functions and doesn't trigger any change events, neither does the default implementation in the Backbone.Model constructor
}
于 2012-08-03T18:32:57.460 に答える