Как получить базовые атрибуты модели без .get

В позвоночнике кажется, что мне нужно получить атрибуты модели через model.get('att_name')

Я бы предпочел бы получить их так, как бы я получил любое публичное поле внутри объекта: model.att_name

Может ли кто-нибудь подумать о способе обойти это?

например: В мире python я бы переопределил getattr на модели примерно так:

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

О, и я использую CoffeeScript

Ответы

Ответ 1

Атрибуты модели, которые вы используете get() и set() или defaults для получения/установки, сохраняются в атрибуте instance.attributes.

Кроме того, это атрибуты, которые будут переданы и возвращены из sync(), а также toJSON(). Поэтому, когда вы fetch(), save() и т.д., Передается только то, что хранится в instance.attributes.

Ничто не остановит вас, конечно, от обычных атрибутов, таких как instance.foo на ваших объектах. Если вы хотите рассматривать их как другие атрибуты и передавать их вместе с fetch() и save(), вы можете сделать это, предоставив пользовательскую parse() на вашей модели, которая по умолчанию ничего не делает. Тем не менее, вы должны сделать это только в том случае, если действительно считаете это абсолютно необходимым, если только соблюдаете соглашения с базой.

Ответ 2

Атрибуты доступны в Model.attributes. Вы можете напрямую прочитать это, но используйте set, чтобы изменить их. Вы также можете получить представление всех ваших атрибутов из Model.toJSON() (примечание: toJSON() фактически не возвращает JSON, а объект javascript).

Рекомендуемый способ - использовать toJSON() для шаблонов, сериализации и т.д.

Ответ 3

На самом деле этого нет. Вы можете использовать model.attributes.att_name, но это, вероятно, не то, что вы хотите.

JavaScript не имеет (по крайней мере, не во всех браузерах) возможности перенаправлять доступ к свойствам.