Я использую реляционную основу с django deliciouspie, и у меня проблема с отношениями проверки.
Скажем, у меня есть базовая модель с методом проверки:
MyModel = Backbone.RelationalModel.extend({
urlRoot : '/api/v1/SampleModel/',
relations : [
{
type: Backbone.HasOne,
key: 'box',
relatedModel: 'BoxModel',
includeInJSON: 'id'
}],
validate : function(attr)
{
if(!attr.name)
{
console.log('attr name validation fail');
return "C mon! name is srsly required!";
}
if(!attr.box)
{
console.log('attr box validation fail');
console.log(attr.box);
return "Damn! you forgot to set box!";
}
}
});
В некотором представлении я создаю новый экземпляр MyModel с box
в качестве resource_uri другого объекта:
var BoxUri = '/api/v1/Box/3'
var NewModel = new MyModel();
NewModel.set('box',BoxUri);
NewModel.set('name','new name for model');
и вот заслуга ... когда я делаю save
на модели, всегда происходит сбой при проверке attr.box
, а attr.box
- это None
-, даже если все поля установлены правильно.
Что интересно, если в функции validate
сделать что-то вроде:
validate : function(attr){
if(!attr.name)
{
console.log('attr name validation fail');
return "C mon! name is srsly required!";
}
console.log(attr.box);
}
В приведенном выше случае attr.box
отображается в консоли как желаемый объект.
Конечно, если я удалю метод проверки, объект будет сохранен правильно, с соответствующим отношением и т. д.
Как я отметил в документации, по умолчанию валидация запускается только при вызове save()
, поэтому все поля уже установлены.. так как (и почему) функция validation
знает, что attr.box
пусто?
А может мой подход просто неверен?
Спасибо за любую подсказку.
if(!attr.box)
, что выводит на консольconsole.log(attr.box);
- person Rida BENHAMMANE   schedule 18.02.2014if(!attr.box)
, console.log вернетnull
. Но если я console.log(attr.box) без проверки условия, я получу в консоли весь объект. - person ASmith78   schedule 18.02.2014console.log(attr.box);
до и послеif(!attr.box)
посмотреть, что получится. - person Rida BENHAMMANE   schedule 18.02.2014if(!attr.box)
? Возможно, ваша проблема в другом. - person Rida BENHAMMANE   schedule 18.02.2014