2016-07-11 3 views
1

Мне нужно разработать единую страницу приложения, я выбираю Мифрил.Mithril show component on button click

мне нужно сделать компонент по нажатию кнопки, это мой код:

var accountView = { 
    controller: function (data) { 
     return { 
      showOtherPage: function() { 
       ??? how to render an other component ? 
      } 
     } 
    }, 
    view: function (ctrl) { 
     return [ 
      m("button", { onclick: ctrl.showOtherPage }, "Account") 
     ]; 
    } 
} 

Заранее спасибо

ответ

2

Если вы используете функции маршрутизации MITHRIL и хотите, чтобы показать всю новую страницу, то вы можете использовать ссылку, а не использовать кнопку. (Лично, это, как я обычно ожидать обработки этих сценариев.), Например,

m("a[href=/otherPage]", { config: m.route }, "Account") 

Fiddle: https://jsfiddle.net/11qjx341/

(В качестве альтернативы, вы можете также позвонить m.route('/otherPage') в функции showOtherPage если ссылка не подходит для некоторых причина.)

Или, если вы не используете маршрутизацию Мифрила (например, если вы используете m.mount), но все же хотите отобразить целую новую страницу, вы можете позвонить m.mount с новым представлением оказаны. например

m.mount(document.body, otherView); 

Fiddle: https://jsfiddle.net/91g9db6n/

В качестве третьего варианта, если ваш новый взгляд на самом деле имел в виду, чтобы сосуществовать с текущей страницы, вы можете иметь компонент, который отображается или скрытый на основе состояния. например

return [ 
    m("button", { onclick: ctrl.showModal.bind(ctrl, !showModal) }, showModal ? "Hide Account" : "Account") 
    , showModal ? m.component(OtherView) : null 
]; 

Fiddle: https://jsfiddle.net/mk27tfq1/

+2

Я думаю, что третий вариант является лучшим. Одна из действительно мощных вещей, которые нужно понять о Мифриле, это тот факт, что речь идет о «сейчас что-то» и о «изменении состояния, такого, что происходит». Представление выражает все возможные состояния, в которых может находиться DOM, и изменяет условия, при которых выполняются. – Barney

+0

Да, это шаблон, который я использую много, но я не был уверен, правильно ли прочитал вопрос (использование слова «страница» и «компонент» :-)), и использование слова «страница» сделано я склоняюсь к использованию маршрутизации, в то время как сам вопрос относится к рендерингу компонента, и, следовательно, вариант 3 звучит хорошо :-) – Bryce

+0

Большое спасибо за ваш ответ Брайс. Команда кулака хороша для меня, но скажите, если я ошибаюсь, я теряю преимущество команды route, которая загружает все компоненты при запуске. Так что я попытаюсь использовать второй вариант, ссылку на изображение, чтобы имитировать кнопку. – vhoward44