Подтвердить что ты не робот

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
4b9b3361

Ответ 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). Возможно, они добавили эту функцию после должности Брайана Генисио.. я не знаю.