Backbone.js задает модель внутренних атрибутов хэш напрямую
Использование Backbone.js Я знаю, что настоятельно рекомендуется установить свойство модели с помощью метода set, а НЕ путем прямого изменения атрибут внутреннего хэша.
Однако, кроме того, что автоматическое событие "изменения" не срабатывает автоматически, какие другие минусы или "побочные эффекты" существуют при непосредственном изменении внутреннего хэша?
Проблема, с которой я сталкиваюсь, заключается в том, что, хотя метод set принимает литерал объекта, мне нужно назначить левую сторону, используя переменную, определенную во время выполнения. Спасибо.
myModel.set({
myProperty : myValue; //myProperty is a variable, so this is invalid syntax
})
//vs
myModel.attributes[myProperty] = myValue; //myProperty is a variable that can be evaluated
Ответы
Ответ 1
Хорошо, если вы посмотрите на аннотированный исходный код, вы обнаружите, что set
делает многое.
Что делать, если вы расширили Backbone.Model с помощью функции, которая делает это для вас:
Backbone.Model.prototype.setByName = function(key, value, options) {
var setter = {};
setter[key] = value;
this.set(setter, options);
};
Затем вы можете просто делать то, что хотите прямо на модели:
var model = new Backbone.Model();
model.setByName(myProperty, "bar");
Это похоже на лучшее решение для меня.
Edit
Как отметил @earl3s, это больше не нужно в более поздних версиях Backbone. Сегодня вы можете просто вызвать model.set(myProperty, "bar")
, и он делает то, что вы хотите.
Ответ 2
В аннотированном исходном коде, упомянутом Брайаном Генисио, вы можете прочитать следующие строки:
Msgstr "Обрабатывать оба параметра" ключ ", значение и {ключ: значение} - аргументы стиля.".
Поэтому вы можете просто использовать model.set(myProperty, "bar", options).
Возможно, они добавили эту функцию после должности Брайана Генисио.. я не знаю.