1

アプリのビューには div があり、アプリのページのマウント ポイントとして使用されます。

app.view = function(ctrl) {
    return [
        appHeader.view(),
        appNav.view(),
        m("#page")
    ];
};

以下は機能していないようです。

m.mount(document.getElementById("app"), app);

m.route.mode = "hash";
m.route(document.getElementById("page"), "", {
    "select_company": admin.SelectCompany
});

<div id="page"></div>app.html に直接インクルードすると機能します。htmlを直接書かずに、上記の問題を解決するにはどうすればよいですか?

4

1 に答える 1

3

@ArthurClemens と @barneycarroll から、Gitter チャットを通じて、1 つのアプリケーションで m.mount() と m.route() の両方を使用することは推奨されない方法であると言われました。@barneycarroll が提供する 1 つの解決策は、m.route() のみを使用し、以下のようなアプリケーションの他の共通部分と共にページ ビューを返す関数を使用することです (jsbin はこちら)。

var header = {
  view : function(){
    return m( "h1", "This is the persistent site header" )
  }
}

var nav = {
  controller : function(){
    this.links = [
      [ "/", "Home" ],
      [ "/select_company", "Companies" ]
    ]
  },
  view : function( ctrl ){
    return m( "ul", 
      ctrl.links.map( function( link ){
    return m( "li", 
      m( "a", {
        config : m.route,
        href   : link[ 0 ]
      }, link[ 1 ] )
    )
      } )
    )
  }
}

function furnish( component ){
  return {
    view : function(){
      return [
    header,
    nav,
    component
      ]
    }
  }
}

var home = {
  view : function(){
    return m( "h2", "Welcome!" )
  }
}

var selectCompany = {
  view : function(){
    return m( "h2", "Please select a company" )
  }
}

m.route.mode = "hash";
m.route( document.body, "/", {
    "/"              : furnish( home ),
    "/select_company": furnish( selectCompany )
} );
于 2015-06-05T09:10:27.953 に答える