2016-07-11 18 views
1

Ich muss eine Single Application Page entwickeln, ich wähle Mithril.Mithril Show Komponente auf Knopf klicken

Ich brauche eine Komponente auf die Schaltfläche klicken machen, das ist mein Code:

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

Vielen Dank im Voraus

Antwort

2

Wenn Sie Mithril die Routing-Funktionalität verwenden und eine ganz neue Seite zeigen möchten, Dann können Sie einen Link verwenden, anstatt eine Schaltfläche zu verwenden. (Persönlich, das ist, wie ich normalerweise antizipieren diese Szenarien Handhabung.) ZB

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

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

(Alternativ können Sie auch m.route('/otherPage') innerhalb der showOtherPage Funktion aufrufen können, wenn ein Link für einige nicht geeignet ist Wenn Sie das Mithril-Routing nicht verwenden (z. B. wenn Sie m.mount verwenden), aber immer noch eine ganz neue Seite rendern möchten, möchten Sie möglicherweise m.mount mit der neuen Ansicht aufrufen, um es zu haben.

gerendert zB

m.mount(document.body, otherView); 

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

Als dritte Option, wenn die neue Ansicht tatsächlich mit der aktuellen Seite koexistieren gemeint ist, können Sie eine Komponente haben, die basierend auf Zustand angezeigt oder ausgeblendet wird. zB

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

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

+2

ich denke, die dritte Option ist die beste. Eine der wirklich kraftvollen Dinge, die man über Mithril verstehen kann, ist die Tatsache, dass es weniger um "jetzt mach etwas" und mehr darum geht, "den Staat so zu verändern, dass Dinge passieren". Die Ansicht drückt alle möglichen Zustände aus, in denen sich das DOM befinden kann, und ändert Bedingungen, so dass sie erfüllt werden. – Barney

+0

Ja, es ist ein Muster, das ich oft benutze, aber ich war nicht sicher, ob ich die Frage richtig gelesen habe (die Verwendung des Wortes "Seite" vs "Komponente" :-)), und die Verwendung des Wortes "Seite" gemacht Ich orientiere mich an der Verwendung von Routing, während sich die Frage selbst auf das Rendern einer Komponente bezieht und daher Option 3 gut klingt :-) – Bryce

+0

Vielen Dank für Ihre Antwort Bryce. Der erste Befehl ist gut für mich, aber sagen Sie mir, wenn ich falsch liege, verliere ich den Vorteil der Route Befehl, der alle Komponenten beim Start geladen. Also werde ich versuchen, die zweite Option, eine Verknüpfung mit einem Bild, um eine Schaltfläche zu simulieren. – vhoward44