2013-04-10 2 views
2

В Backbone.js, есть два способа, которые вы можете получить значение одного атрибута:В Backbone, любая разница между model.get ('foo') и model.attributes.foo?

  1. var foo = model.get('foo');
  2. var foo = model.attributes.foo;

.get() подхода является один рекомендуется в документации, но по-видимому, он немного медленнее, поскольку он включает дополнительный вызов функции.

Есть ли причины, по которым я не должен использовать подход .attributes? Существуют ли случаи, когда это может вызвать неожиданное поведение?

ответ

4

Это вопрос инкапсуляции. Используя метод get, вы говорите, что мне все равно, как это реализовано, я просто хочу этот атрибут. Поэтому в будущем, если вы хотите переопределить метод get, чтобы вернуть что-то более значимое, вы бы не изменили код во всем, что вы используете этот атрибут.

Например, если ваша модель имеет стоимость атрибута, связанную с ней, которая является числом.

model.get('cost') //would give you that number say 1999.99 

Теперь в будущем предположим, что вы хотите, чтобы он возвращал форматированную строку, вы можете переопределить метод get.

model.get('cost') // same method would now give you $1999.99 or EUR 1999,99 in french :) 

Также вы уменьшаете количество кода и увеличиваете удобочитаемость.

model.get ('foo') читает намного лучше, чем model.attributes.foo; и он короче.

2

Как вы упомянули, в вашем вопросе подход .get() является тем, который рекомендуется в документах. Хотя вызов атрибута напрямую приведет к сохранению нескольких секунд nano, вы не должны этого делать.

Причина в том, что это может побудить кого-то читает код, чтобы использовать тот же метод, чтобы установить атрибут: model.attributes.foo = 'blah';

я, вероятно, не должен вам сказать, что это было бы плохо. Возможно, код работает, потому что вы получаете правильное значение для модели, но вы обходите всю логику отслеживания изменений, встроенную в базовую станцию. Никакие события не будут срабатывать, если вы установите атрибут таким образом.

Это, как говорится - если никто не читает ваш код или изменить свой код, но вам, и вы заботитесь о тех дополнительных наносекунд что много, и вы знаете, что вы будете никогда сделать этот тип ошибка в будущем. Тогда обязательно используйте свойство attributes напрямую.

Смежные вопросы