Как получить базовые атрибуты модели без .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 не имеет (по крайней мере, не во всех браузерах) возможности перенаправлять доступ к свойствам.