Как я могу отправить данные инициализации в компонент Mithril - PullRequest
0 голосов
/ 09 сентября 2018

Я пытаюсь инициализировать компонент Mithril, установив идентификатор для извлечения данных с сервера следующим образом:

// view/UserList.js
module.exports = {
    oninit: function(vnode) {
        console.log(vnode);
        var groupId = vnode.attrs.groupId;
        console.log('The group ID is '+groupId);
        User.loadUsersInGroup(groupId);
    },
    view: ...
}

У меня есть следующее:

var userList = require('./view/UserList');
m.mount(document.body, UserList, {groupId: 5});

Но я получаю:

vnode.attrs is undefined

Я пытался изменить его на:

var UserList = require('./view/UserList');
m.mount(document.body, m(UserList, {groupId: 5}));

Но теперь я получаю:

m.mount(element, component) expects a component, not a vnode

Как мне правильно заполнить vnode.attrs?

1 Ответ

0 голосов
/ 09 сентября 2018

Правильный способ отправки данных инициализации в компонент можно найти по адресу https://mithril.js.org/mount.html#description.

Для передачи аргументов при монтировании компонента используйте:

m.mount(element, {view: function () {return m(Component, attrs)}})

Применительно к этому делу это будет:

m.mount(document.body, {view: function() { return m(UserList, {groupId: 5}); }});

Некоторые другие способы сделать это:

const full   = {view: vnode => m('h1', vnode.attrs.test)}
const short  = {view: v => m('h1', v.attrs.test)}
const dest   = {view: ({attrs}) => m('h1', attrs.test)}
const destf  = {view: ({attrs: {test}}) => m('h1', test)}

m.mount(document.body, {
  view: () => [
    m(full,  {test: "full"}),
    m(short, {test: "short"}),
    m(dest,  {test: "destructured"}),
    m(destf, {test: "fully destructured"})
  ]
})

Смотрите их в действии здесь. (любезно предоставлено osban в чате Mithril.js Gitter)

...