Это кажется довольно простым вопросом, но я не могу найти много ответов или объяснений нигде без противоречий. Смотрите ниже класс;
export class Person {
FirstName: KnockoutObservable<string>;
Surname: KnockoutObservable<string>;
FullName: KnockoutComputed<string>;
SurnameExternalReference: KnockoutObservable<string>;
constructor(data) {
this.Name = ko.observable(data.Name).extend(someExtender: logChange);
this.Surname = ko.observable(data.SurnameName).extend(someExtender: logChange);
this.FullName = ko.copmuted(() => {
return this.FirstName() + " " + this.Surname();
}, this);
this.SurnameExternalReference = ko.observable();
this.Surname.subscribe(() => {
//function here tests an external ko array of people for that surname
//and assigns this.SurnameExternalReference to that observable.
//e.g. - then sets sub back up as below only if found, otherwise this.SurnameExternalReference = null
this.SurnameExternalReference = external.Surname;
this.SurnameExternalReference.subscribe(() => {
this.Surname(this.SurnameExternalReference());
});
});
this.SurnameExternalReference.subscribe(() => {
this.Surname(this.SurnameExternalReference());
});
}
}
Я написал это только для справки, мой фактический viewModel чрезвычайно сложен и его невозможно опубликовать, но он делает (и должен делать) это. logChange - это функция, которая проверяет ввод и регистрирует изменение, если оно действительно, иначе не записывает новое значение (или не вносит изменения).
Итак, мой вопрос: если свойство внешней фамилии будет изменено, в каком порядке будут вызываться расширители и функции? Принимая во внимание, что в подписке по фамилии this.SurnameExternalReference наследует экстендер.
Всегда ли экстендеры вызывают перед подпиской? Названы ли подписки в порядке их установки (я обнаружил, что многие люди соглашаются с тем, что порядок является довольно случайным И в том порядке, в котором они установлены)?
Если наблюдаемая внешне перезаписана, наследует ли она порядок внешнего саб / расширителя или добавляется в конец?
Довольно сложный вопрос, задавайте любые вопросы / публикуйте сценарии, если запутались.
РЕДАКТИРОВАТЬ: возможно ли расширение / подписки работать асинхронно или они могут работать только синхронно?