Skip to content
Mithril.js 2
Main Navigation AnleitungAPI

Deutsch

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

Deutsch

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

Aussehen

Sidebar Navigation

API

Kern-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(object, extra)

Optionale API

stream()

Anleitung

Auf dieser Seite

censor(object, extra) ​

Beschreibung ​

Gibt ein flach geklontes Objekt zurück, bei dem Lebenszyklus-Hooks und alle angegebenen benutzerdefinierten Attribute entfernt wurden.

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

Signatur ​

censored = m.censor(object, extra)

ArgumentTypErforderlichBeschreibung
objectObjectJaEin Schlüssel-Wert-Paar-Objekt, das zensiert werden soll.
extraArray<String>NeinZusätzliche Eigenschaften, die entfernt werden sollen.
returnsObjectDas Originalobjekt, wenn keine Eigenschaften zum Entfernen vorhanden sind, andernfalls ein flach geklontes Objekt mit den entfernten Eigenschaften.

Wie man Signaturen liest

Wie es funktioniert ​

In den meisten Fällen ist diese Methode nicht erforderlich, und es ist ratsam, nur die benötigten Attribute explizit anzugeben. Gelegentlich kann es jedoch bequemer sein, alle unbekannten Attribute an ein anderes Element weiterzuleiten. Dies kann sinnvoll sein, birgt aber das Risiko, Lebenszyklus-Methoden unbeabsichtigt mehrfach aufzurufen.

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, [
        // !!!
        // ...
      ]);
    },
  };
}

Auf den ersten Blick unproblematisch, führt dieser Code zu einem unerwünschten Verhalten: sendViewHit wird jedes Mal zweimal aufgerufen. Hier kommt m.censor ins Spiel. Es ermöglicht, das oncreate Attribut zu entfernen, sodass es nur einmal aufgerufen wird und der Aufrufer sicher sein kann, dass keine unerwarteten Fehler auftreten.

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

Ähnliche Probleme können mit dem key Attribut auftreten:

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,
        ]),
      ];
    },
  };
}

Dies würde letztendlich einen Fehler auslösen, da Mithril.js beim Erzeugen des Layout VNodes (virtueller DOM-Knoten) Folgendes sieht:

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

Dies ist möglicherweise nicht sofort erkennbar, insbesondere in komplexeren Szenarien mit Indirektion und/oder anderen Problemen. Um dies zu beheben, muss das key: Attribut auf ähnliche Weise zensiert werden. Das benutzerdefinierte pageTitle Attribut kann ebenfalls entfernt werden, da es keinen Mehrwert im DOM bietet.

javascript
// Behoben
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
Vorherige Seiteredraw()
Nächste Seitestream()

Veröffentlicht unter der MIT-Lizenz.

Copyright (c) 2024 Mithril Contributors

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

Veröffentlicht unter der MIT-Lizenz.

Copyright (c) 2024 Mithril Contributors