У меня есть список моделей, таких как Product
, Book
, Phone
Некоторые из них могут наследовать от другого.изменение скелетной модели на лету
И я пытаюсь построить a для добавления разных продуктов, вид формы должен быть изменен в соответствии с типом, выбранным пользователем.
Это то, что попытались в настоящее время:
var Product = Backbone.Model.extend({
defaults: {
name: null,
price: 0,
type: null, /** phone or book or something else*/
phoneColor: null,
phoneWeight: 0,
bookCategory: null,
bookAuthor: null
}
});
var ProductFormView = Backbone.View.extend({
..........
render: function() {
var type = this.model.get('type');
switch (type) {
case 'phone':............
break;
case 'book':.........
break;
}
return this;
}
});
Поместите все атрибуты в Product
и визуализации формы в зависимости от различных типов моделей, живой демо: http://jsfiddle.net/57ra37vg/
Даже сейчас работает, но Я думаю, что это плохая идея, на мой взгляд, базовый класс Product
не должен содержать слишком много атрибутов. Я хотел бы что-то вроде этого:
var Product = Backbone.Model.extend({
defaults: {
name: null,
price: 0,
type: null, /** phone or book or something else*/
}
});
var Book = Product.extend({
defaults:{
bookAuthor:null,
bookCategory:null
}
});
var ProductView = Backbone.View.extend({
render:function(){}
});
var BookView = ProductView.extend({
render:function(){}
});
var PhoneView = ProductView.extend({
render:function(){}
});
Каждый субпродукт владеет их атрибутами и видами. При таком дизайне, когда пользователь меняет тип продукта, выбирая опцию, если я могу изменить текущую модель на другую модель, а затем обновить представление.
Но, похоже, я не могу изменить экземпляр Book
на Phone
на лету.
Итак, как вы делаете дизайн?