Использование Dojo 1.6.1.
Обновление: Здесь jsfiddle http://jsfiddle.net/E4EaM/1/
Форма создается с некоторыми полями.
this.projectServiceidField = new dijit.form.TextBox({
label: 'idField'
, name: 'project_service_id'
, required: true
, type: 'hidden'
}).placeAt(this.domNode);
this.projectServiceEquipmentSourceAddress = new dijit.form.FilteringSelect({
name: 'source_address_id'
, required: true
, store: model.CustomerAddressesPairsView
, searchAttr: "name"
, style: "width: 40ex;"
});
Приложение должно быть уведомлено, когда все значения виджета были установлены.Для этого создается отложенный объект с наблюдением Stateful в свойстве value виджета.Все отложенные объекты помещаются в DeferredList.Как только значение виджета было изначально установлено, часы удаляются, и его отложенный объект разрешается.
//loop
w.deferred = new dojo.Deferred();
da.push(w.deferred);
// Watch the widget's value
w.initWatch = w.watch('value', function(property, oldValue, newValue) {
w.initWatch.unwatch();
console.debug(w.name, 'property:', property, 'oldValue:', oldValue,'newValue:', newValue,'w.get(\'value\'):', w.get('value'));
w.deferred.resolve();
});
// Set the widget's value
w.set('value', value);
//endloop
var dl = new dojo.DeferredList(da);
Когда разрешен DeferredList, все значения виджета должны быть установлены.
dl.then(
function() {
dojo.forEach(da, function(d) {
console.debug(Date.now(), d);
})
console.debug(Date.now(), dl, 'DeferredList resolved -------->', form.getValues());
console.debug(form.getValues());
}
);
Но это не работает, как ожидалось.В частности, поля, которые делают запросы xhr.Вот значения, сгенерированные для событий изменения 'value'.
project_service_id свойство: значение oldValue: newValue: 1025 w.get ('значение'): 1025
source_address_id свойство: значение oldValue: newValue: 59 w.get ('value '):
source_address_id должен был иметь значение 59, но когда я w.get (' value '), оно не равно newValue.Разве они не должны быть?
Как я могу определить, когда было установлено значение виджета?Почему не значение == w.get ('значение') сразу после w.set ('значение', значение)?
Если w.set ('значение', значение) на самом деле не устанавливаетзначение, разве оно не должно возвращать отложенное?
Разве не следует смотреть только огонь после того, как значение было установлено?
Версии Dojo:
Сбои в додзё 1.6.1.Часы не всегда запускаются, и w.get ('value')! = NewValue, когда это происходит.
Сбой в Dojo 1.7.2.Часы по-прежнему не всегда срабатывают, но, по крайней мере, w.get ('value') == newValue.