2016-10-26 10 views
0

現在、別のアプリケーションとしてページを構造化する方法はありません。次のように私は現在考えている方法は次のとおりです。独立したアプリケーションとしてのsinpleページアプリケーションの各ページ

  • App/Mainファイルのルーティングを提供してブートストラップです。
  • ブログは、独自のアップデート、モデル、REST呼び出しを持つ別個のアプリです。
  • 別のルート(写真アルバムなど)に切り替えると、独自のアップデート、モードなどを含む別のElmアプリが起動します。

これを達成する方法はありますか?

+0

ないあなたがここに実現したいのかを確認します(これはあなたが意味ルーティングすべてのフロントエンドであります?)。とにかく、それぞれ独自のurl、独自のindex.html、独自のmain.elm、独自のモデル、アップデート、RESTを持つ完全に独立した3種類のelmアプリケーションを持つことができます。次に、ユーザーは、他のページの(外部)URLを持つリンクをレンダリングするだけで、あるアプリから別のアプリにナビゲートできます。それはあなたが探しているものですか?または、3つのアプリを同時に実行して表示する必要がありますか? – wintvelt

+0

@wintveltあなたは正しい道を歩いています。私は*すべてのページを分離したいと思っています。ブログがフォトアルバムとインターレースされる必要がないからです。どのように達成できるかについての文献はありますか? – DevNebulae

答えて

6

さて、この達成するためにさまざまな方法があります。

1つエルムアプリは、その場合には別のコンポーネント

としてそれぞれのページで、あなたは一つの「ルート」ニレモジュールを作成し、モデル、メッセージ、初期化、更新、ビューをインポートします。 あなたのブログでも同じです。

次に1つのelmアプリがあります。これは私が取るアプローチです: グローバルなフロントエンド状態を管理することができます.1つの場所や写真、ブログのユーザー情報などがあります。

あなたの主なニレファイルは次のようになります:

import PhotoPage 
import BlogPage 

type alias Model = 
    { photo : PhotoPage.Model 
    , blog : BlogPage.Model 
    , currentPage : Page 
    } 

type Page = Home | Blog | Photo 

init = 
    { photo = PhotoPage.init 
    , blog = BlogPage.init 
    , currentPage = Home 
    } 

type Msg = 
    GoHome 
    | PhotoMsg PhotoPage.Msg 
    | BlogMsg BlogPage.Msg 

update msg model = 
    case msg of 
    PhotoMsg photoMsg -> 
     let 
     (newPhoto, photoCmd) = PhotoPage.update photoMsg model.photo 
     in 
     { model | photo = newPhoto } 
     ! [ Cmd.map PhotoMsg photoCmd ] 

2.完全に別のニレのアプリ

ビルド3完全に独立したアプリ/ウェブサイト、自身のindex.htmlとそれぞれ、および自分のelmアプリ。

デフォルトのブラウザナビゲーションを使用して、さまざまなElmアプリ間をナビゲートします。

これは、サーバー/セッションレベルでグローバルな状態を管理する方法がある場合に機能します。あなたのhome.elmファイル内

あなたのビュー機能は、このようなものを見ることができる:

view model = 
    div [] 
    [ h1 [] [ text "I am the homepage"] 
    , a [ href "/photo" ] [ text "go to photo page" ] 
    ] 
+0

私はすでに本当に近くにいましたが、ホップを使用して以来、私には抽象がありました。文法にいくらか慣れていないため、私は自分のミスが何かを見ていませんでした。しかし、この答えは本当に役に立ちました。将来の読者のために:より多くの文献については、ここで良い文書を読むことができます:https://www.elm-tutorial.org/en/02-elm-arch/06-composing.html – DevNebulae

+1

Elmではすべての "コンポーネント"が推奨されていません。別のページ(あなたの質問のように)はルールではなく例外です。 Elmの規模をどのように調整するかについては、[公式ガイド](https:// guide)を参照してください。elm-lang.org/reuse/)。もう一つの良い情報源は[ElmのSPAを構築するこのブログ記事](http://7sharpnine.com/2016/10/03/building-an-spa-with-elm/)または[GitHubのこの例](https ://github.com/knewter/time-tracker) – wintvelt

関連する問題