Выполните поиск, когда значение ko postbox опубликовано

Я начал писать этот вопрос, желая знать, как запустить функцию поиска, когда наблюдаемое свойство изменяется другой моделью представления, и теперь задаюсь вопросом, как я подхожу к этой проблеме. В любом случае, вот мой сценарий:

У меня есть страница с сеткой элементов. Пользователь нажимает кнопку для редактирования элемента, и мы показываем всплывающее окно редактирования, которое содержит все исходные данные вместе с подробными данными об этой записи, которых нет в основном объекте сетки.

В окне редактирования у меня есть отдельная наблюдаемая для "рабочей копии" данных. Когда пользователь фиксирует изменения, нажимая кнопку "Сохранить", я планирую скопировать их в исходный объект, чтобы изменения отразились в сетке.

Прямо сейчас я использую библиотеку ko.postbox для связи между двумя моделями представления. Оба содержат наблюдаемую для сохранения элемента, который был выбран и синхронизирован с помощью "syncWith".

Вот идея того, как это выглядит:

function MainVM()
{
    self = this;
    this.Item = ko.observable().syncWith("GridItem");

    this.Edit = function (item)
    {
         self.Item(item);
    }
}

function EditVM()
{
    self = this;

    this.SelectedItem = ko.observable().syncWith("GridItem");
    this.WorkingItem = ko.observable();

    this.RetrieveGridItemDetails = function (id)
    {
        // Ajax lookup to populate WorkingItem
    }
}

Когда пользователь щелкает, чтобы отредактировать элемент... Я хотел бы, чтобы выбранный элемент был опубликован в окне редактирования vm (уже происходит с syncWith), но затем также выполняю поиск AJAX, чтобы извлечь остальную информацию относительно этого элемента (иссякают идеи как это сделать).

Я посмотрел на ручную подписку на эту конкретную наблюдаемую, а также на использование вычисляемой наблюдаемой в пределах модели окна редактирования, чтобы иметь возможность вызывать отдельную функцию поиска, но до сих пор я не смог найти рабочее решение:(

Я иду по неверному пути с моим нынешним мышлением или кто-нибудь знает, как я могу выполнить этот поиск?

1 ответ

Решение

Я до сих пор не смог заставить все работать должным образом с помощью syncWith, однако я смог получить вызов lookup для выполнения с использованием subscribeTo следующим образом:

SelectedItem = ko.observable<Item>().subscribeTo("GridItem", true, (item) => {
    if (item != null) {

        this.RetrieveItem(item.HeaderID());

        return item;
    }
    return new Item();
});

* Примечание: это реализация Typescript

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

Другие вопросы по тегам