Должны ли представления устанавливать данные модели?

#backbone.js

#backbone.js

Вопрос:

Я просто пытаюсь выяснить, вероятно, простой вопрос.

Должны ли представления устанавливать данные модели напрямую или вызывать только методы модели, которые изменяют их собственные данные?

Ответ №1:

как и все остальное в разработке программного обеспечения, «это зависит».

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

 MyView = Backbone.View.extend({
  events: {
    "change #name", "setName"
  },

  setName: function(e){
    var val = $(e.currentTarget).val();
    this.model.set({name: val});
  }
});
  

С другой стороны, если вы запускаете бизнес-логику и другой код, который устанавливает данные в модели (но на самом деле делает это только как часть бизнес-логики), тогда вам следует вызвать метод для модели.

«Конечный автомат» был бы хорошим примером того, когда вы это сделаете. Или, в галерее изображений, которую я написал, у меня была некоторая логика при выборе изображения для отображения. Если изображение уже выбрано, не выбирайте его снова. Я поместил эту логику в метод моей модели изображения:

 Image = Backbone.Model.extend({
  select: function(){
    if (!this.get("selected")){
      this.set({selected: true});
    }
  }
});
  

Как показано здесь, мне нравится работать по простому правилу: если у меня нулевая логика вокруг вызова set , то я устанавливаю его непосредственно, где бы я ни находился. Если есть какая-либо логика, связанная с моделью, вокруг набора, то я помещаю ее в модель.

В любом случае, когда вы хотите установить данные, вы должны использовать set метод. Обход этого и установка атрибутов модели напрямую model.attributes предотвратит запуск большого количества кода Backbone и потенциально вызовет у вас проблемы.

Ответ №2:

Это зависит от вашего стиля программирования. Я всегда устанавливаю их напрямую. Если Закон Деметры вам нравится, и вы ориентируетесь на объект (и, возможно, с фоном Java / Microsoft -stack), тогда стиль будет заключаться в создании методов получения / установки.

Если вы, с другой стороны, находитесь в лагере «Размер — враг» (я также рекомендую комментарии Джеффа Этвуда), вам, безусловно, следует напрямую устанавливать данные модели (как я намекал ранее, я сам в этом лагере).

При этом, Backbone.js модели уже имеют методы получения и установки .get и .set . Вы не должны манипулировать .attributes элементом напрямую. Я не уверен, что вам не следует читать из него, я склонен делать это время от времени и пока не сталкивался с проблемами из-за этого.