web-dev-qa-db-ja.com

.getなしでバックボーンモデルの属性を取得する方法

バックボーンでは、model.get('att_name')を介してモデル属性を取得する必要があるようです

オブジェクト内の任意のパブリックフィールドを取得する方法でそれらを取得することを事前に行います:model.att_name

誰もがこれを回避する方法を考えることができますか?

例:python worldでは、モデルのgetattrを次のようにオーバーライドします。

def getattr(self, att):
   return self.get(att)

ああ、そして私はCoffeeScriptを使っています

15
Adam Fraser

取得/設定するためにget()およびset()またはdefaultsを使用するモデル属性は、_instance.attributes_属性に格納されます。

また、これらはsync()およびtoJSON()に渡され、そこから返される属性です。したがって、fetch()save()などの場合、_instance.attributes_に格納されているものだけが渡されます。

もちろん、オブジェクトに_instance.foo_のような通常の属性があることを妨げるものはありません。これらを他の属性として扱い、fetch()およびsave()に渡す場合は、モデルにカスタムparse()を提供することで、これを行うことができます。デフォルトでは何もしません。とはいえ、バックボーンの慣例に準拠するためだけに必要な場合にのみ、絶対に必要であると考える場合にのみ、これを行う必要があります。

18
ggozad

属性には _Model.attributes_ でアクセスできます。そこから直接読み取ることができますが、setを使用して変更できます。 Model.toJSON()note:toJSON()は実際にはJSONを返しませんが、JavaScriptオブジェクトを返します)。

推奨される方法は、テンプレート、シリアル化などにtoJSON()を使用することです。

本当に、この辺りに離れはありません。 model.attributes.att_name、しかしそれはおそらくあなたが望むものではありません。

JavaScriptには(少なくともすべてのブラウザーでは)プロパティのアクセスをリダイレクトする機能がありません。

1
nicholaides