2011-07-07 2 views
3

Как я могу обновить объект по умолчанию модели?backbone.js обновление модели по умолчанию

Например, у меня есть объект Box, смоделированный ниже. Он имеет атрибут «Цвет» по умолчанию, установленный на «#FFF».

Как только пользователь начинает взаимодействовать с сервером, в какой-то момент сервер передает новый цвет # 000 по умолчанию. Я хочу, чтобы все новые поля, созданные с этого момента, стали по умолчанию атрибутом цвета # 000.

В качестве стороннего, если предположить, что я выполняю это обновление, поскольку по умолчанию передается по ссылке, все существующие поля также будут обновляться по умолчанию. Это верно?

var Box = Backbone.Model.extend({ 
    defaults: { 
     "Colour" : "#FFF" 
    } 
}); 

ответ

9

по умолчанию может быть легко изменен с

Box.prototype.defaults.Colour = '#000' 

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

myBox.__proto__.constructor.prototype.defaults.Colour === '#000' 

но это не имеет значения, и оно не изменит значение, которое исходит от myBox.get('Colour'), поскольку значения по умолчанию копируются в myBox.attributes при создании экземпляра. Чтобы изменить существующие блоки, вам нужно будет использовать myBox.set({'Colour': '#000'}) или myBox.attributes.Colour = '#000'.

(я надеюсь, что я интерпретировал ваш вопрос правильно)

3

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

var Box = Backbone.Model.extend({ 

    // Instance properties here. 

}, { 

    colour: '#FFF' 

}); 

, а затем, если вам нужно использовать это свойство, ссылаться на него как:

Box.colour 

и если вам нужно изменить его, вам нужно только сделать:

Box.colour = #000; 

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

+0

Благодаря @Bill я искал специально для техники Box.prototype.defaults._attribute_, но это обсуждение, например против свойств класса полезно тоже. – fortuneRice

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