16

私の理解では、Backbone.js モデルの属性は、ややプライベートなメンバー変数として宣言することになっています。

this.set({ attributeName: attributeValue })
// accessing the value
this.get('attributeName');

しかし、実際のモデルで関数を書いているときは、次のように言う方がはるかに簡単に思えます:

this.attributeName = attributeValue;
// accessing the value
this.attributeName;

また、後者のバージョンは backbone.js のイベント管理を経由しないため、処理が高速になると思います。

ですから、主にモデルの内部で使用される属性を専門家がどのように扱うのか疑問に思っていました。これらは、実際には外部から少し保護したい属性であるため、後者の例のようにそれらを公開することはまだ適切ではないかもしれません. get メソッドと set メソッドを持たない backbone.js ビューの例を見ていると、2 番目の例のようにすれば問題ないようです。モデル内でコーディングするときに get/set(attribute) または this.attribute をいつ使用するかについて、経験則はありますか? それとも、これをより明確にするモデルの例でしょうか?

4

2 に答える 2

55

使用するタイミングmodel.get(property)model.set(...)

モデルのデータgetにアクセスするには、 とを使用する必要があります。これは、 を使用して取得され、 を使用して永続化される、モデルのシリアル化された表現の一部であるすべての属性を意味します。setfetchsave

いつ使用するかmodel.attributes.property

一度もない。

オブジェクトに直接アクセスする代わりに、常にget、特にを使用する必要がありますが、これについては意見が対立しています。とその消費者の間には、イベントを使用してモデルのデータへの変更を消費者に通知できることを保証する契約があると思います。内部属性オブジェクトを直接変更すると、イベントは送信されず、この契約は破られます。特にリスナーがアタッチされていない場合、バックボーン イベントは非常に高速です。setmodel.attributesmodelchange

代わりに属性に直接アクセスすること自体はまったく無害ですが、オブジェクトが完全にプライベートであると見なされるgetように、避ける必要があります。attributes

変更をトリガーするイベントを絶対に防ぐ必要がある場合は、次のsilent:trueオプションを使用できますmodel.set({key:val}, {silent:true})。これは前述の契約を破るものであり、Backbone 自身のドキュメントでさえ、次の注意事項を示しています。

これはめったに、あるいは決して良い考えではないことに注意してください。イベント コールバックのオプションで特定のフラグを渡して確認し、無視することを選択すると、通常はうまくいきます。

いつ使用するかmodel.property

dataではないプロパティ、つまり一時的な状態変数、計算されたプロパティなどは、モデル エンティティに直接アタッチできます。これらのプロパティは、一時的かつ推移的であると見なす必要があります。モデルの初期化時またはその有効期間中に再作成できますが、パブリックであれプライベートであれ、永続化するべきではありません。一般的な命名規則では、次のようにプライベート プロパティの前に_文字を付けます。

this._privateProperty = 'foo';
this.publicProperty = 'bar';
于 2013-03-21T13:34:41.997 に答える