Как использовать пользовательские методы магазина в svelte? - PullRequest
0 голосов
/ 29 октября 2019

Я делаю модал, его атрибуты хранятся в магазине. Вместо того, чтобы открыть его, как это, из элемента: on:click={() => $modal.isOpen = true}

Я хочу открыть его так: on:click={() => $modal.toggle()} из элемента.

Вот мой код:

export const modal = writable({
    isOpen: false,
    title: 'Title',
    content: 'Content',
    toggle: () => {
        console.log(modal)
        modal.set({ ...modal, isOpen: true });
    }
}); 

Когда я регистрирую modal, он регистрирует только методы set, subscribe, update. Затем, когда я нажимаю снова, эти методы исчезают: он корректно перезаписывает их, просто кажется, что я никогда не смогу получить инициализированное состояние модала. Я пытался получить доступ к текущему объекту с помощью this или параметров ((a, b) =>), но ни один не возвратил ничего.

1 Ответ

2 голосов
/ 29 октября 2019

Аргумент, переданный writable, содержит только данные, а не методы. Чтобы создать собственный магазин, сделайте это как в этом учебном пособии - создайте свою собственную фабрику магазинов, которая обернет writable:

const toggleable = initial => {
  const store = writable(initial);

  return {
    ...store,
    toggle: () => store.update(n => !n)
  };
};

const modal = toggleable(false);

Демо здесь: https://svelte.dev/repl/682ef8309f924ba7ad8de1e2f5069988?version=3.12.1

...