Skip to content
Mithril.js 2
Main Navigation PrzewodnikAPI

Polski

English
简体中文
繁體中文
Español
Français
Русский
Português – Brasil
Deutsch
日本語
한국어
Italiano
Türkçe
čeština
magyar

Polski

English
简体中文
繁體中文
Español
Français
Русский
Português – Brasil
Deutsch
日本語
한국어
Italiano
Türkçe
čeština
magyar

Wygląd

Sidebar Navigation

API

Podstawowe API

m(selector, attributes, children)

render(element, vnodes)

mount(root, component)

route(root, defaultRoute, routes)

request(options)

parseQueryString(string)

buildQueryString(object)

buildPathname(object)

parsePathname(string)

trust(html)

fragment(attrs, children)

redraw()

censor(obiekt, extra)

Opcjonalne API

stream()

Przewodnik

Na tej stronie

censor(obiekt, extra) ​

Opis ​

Zwraca płytką kopię obiektu, z której usunięto atrybuty cyklu życia oraz dodatkowe atrybuty przekazane jako argument.

javascript
var attrs = { one: 'two', enabled: false, oninit: function () {} };
var censored = m.censor(attrs, ['enabled']);
// {one: "two"}

Sygnatura ​

censored = m.censor(object, extra)

ArgumentTypWymaganyOpis
objectObjectTakObiekt typu klucz-wartość.
extraArray<String>NieDodatkowe nazwy właściwości do usunięcia.
zwracaObjectOryginalny obiekt, jeśli nie ma właściwości do usunięcia. W przeciwnym razie zwraca płytką kopię obiektu z usuniętymi właściwościami.

Jak czytać sygnatury

Jak to działa ​

Zazwyczaj nie potrzebujesz tej metody i wystarczy, że określisz tylko te atrybuty, które chcesz przekazać. Czasami jednak wygodniej jest przekazać wszystkie atrybuty (również te nieznane) do innego komponentu. Często jest to uzasadnione, ale może prowadzić do problemów, np. do dwukrotnego wywoływania metod cyklu życia.

javascript
function SomePage() {
  return {
    view: function () {
      return m(SomeFancyView, {
        oncreate: function () {
          sendViewHit(m.route.get(), 'some fancy view');
        },
      });
    },
  };
}

function SomeFancyView() {
  return {
    view: function (vnode) {
      return m('div', vnode.attrs, [
        // !!!
        // ...
      ]);
    },
  };
}

Wygląda to niewinnie, ale stwarza problem: wysyłasz dwa trafienia za każdym razem, gdy następuje nawigacja do tego widoku. W tym momencie z pomocą przychodzi m.censor: pozwala on usunąć atrybut oncreate, dzięki czemu zostanie on wywołany tylko raz, a kod wywołujący zachowa czytelność i uniknie trudnych do zdiagnozowania błędów.

javascript
// Naprawione
function SomeFancyView() {
  return {
    view: function (vnode) {
      return m('div', m.censor(vnode.attrs), [
        // ...
      ]);
    },
  };
}

Podobne problemy mogą wystąpić również w przypadku kluczy:

javascript
function SomePage() {
  return {
    view: function () {
      return m(
        Layout,
        {
          pageTitle: 'Some Page',
          key: someKey,
        },
        [
          // ...
        ]
      );
    },
  };
}

function Layout() {
  return {
    view: function (vnode) {
      return [
        m('header', [m('h1', 'My beautiful web app'), m('nav')]),
        m('.body', vnode.attrs, [
          // !!!
          m('h2', vnode.attrs.pageTitle),
          vnode.children,
        ]),
      ];
    },
  };
}

To spowodowałoby błąd wyrzuceniem błędu, ponieważ tak wygląda vnode Layout z perspektywy Mithril.js:

javascript
return [
  m('header', [m('h1', 'My beautiful web app'), m('nav')]),
  m('.body', { pageTitle: 'Some Page', key: someKey }, [
    m('h2', 'Some Page'),
    [
      /* ... */
    ],
  ]),
];

Może to być trudne do zauważenia na pierwszy rzut oka, szczególnie w bardziej złożonych scenariuszach. Aby to naprawić, należy ocenzurować atrybut key. Można również ocenzurować atrybut pageTitle, ponieważ jego obecność w DOM nie wnosi żadnej wartości.

javascript
// Naprawione
function Layout() {
  return {
    view: function (vnode) {
      return [
        m('header', [m('h1', 'My beautiful web app'), m('nav')]),
        m('.body', m.censor(vnode.attrs, ['pageTitle']), [
          m('h2', vnode.attrs.pageTitle),
          vnode.children,
        ]),
      ];
    },
  };
}
Pager
Poprzednia stronaredraw()
Następna stronastream()

Opublikowano na licencji MIT.

Copyright (c) 2024 Mithril Contributors

https://mithril.js.org/censor.html

Opublikowano na licencji MIT.

Copyright (c) 2024 Mithril Contributors