#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
элементом напрямую. Я не уверен, что вам не следует читать из него, я склонен делать это время от времени и пока не сталкивался с проблемами из-за этого.