2017-07-03 1 views
0

私はルーティングを管理するためにバックボーンを使用しています。私は次のように私のウェブサイト上で、多言語を実装する必要があります:フランス語でバックボーン、マルチ言語、ルート

  • :www.example.com
  • 英語:

www.example.com/enまた私が持っていますプロダクトに関する私のURLに追加のルートがあるので、www.example.com/devまたはwww.example.com/dev/enを与えます。

ルートは私のWebサーバー(ノード)から提供されます。下の例では、%>変数の接頭辞<%で検索されています。

これはlocalhostでもうまく動作しますが、追加のルートを持つURLをサーバーに渡すとすぐにページが見つかりません。私は両方の状況(ルートの有無にかかわらず)を管理する汎用ソリューションを探しています。

<!DOCTYPE html> 
<html> 
<head> 
... 
</head> 
<body> 

<script type="text/javascript"> 

window.onload = function() 
{  
    let prefix = '<%- prefix %>'.substr(1); 

    var BaseRouter = Backbone.Router.extend({  
     routes: { 

      [prefix + 'imgfocus/:imgid'] : 'imgfocus', 
      [prefix + 'skymap/:obsids'] : 'skymap', 
      // ... 
      }, 

     imgfocus : function(imgid) 
     { 
      navservice.loadScreen({page : 'imgfocus', imgid : imgid}); 
     }, 
     skymap : function(obsids, stateid, tourid) 
     { 
      navservice.loadScreen({page : 'skymap', obsids : parseInt(obsids) === 0 ? undefined : obsids, stateid : stateid, tourid : tourid}); 
     }, 
     /// ... 
    }); 


    let br = new BaseRouter(); 

    for (let i = 0; i < navservice.languages.length; i++) 
     { 
      if (navservice.languages[i] !== '') 
      { 
       for (let key in br.routes) 
       { 
        br.routes[navservice.formatUrl(key, navservice.languages[i]).substr(1)] = br.routes[key]; 
       } 
      } 
     } 
     // language retrieval 
     var language = navservice.getUserLanguage(); 

     Backbone.history.start({pushState : true, root: '/' + (language ? language : '')}); 
    } 

    $(document).on("click", "a:not([data-bypass])", function (evt) { 
     var href = { prop: $(this).prop("href"), attr: $(this).attr("href") }; 
     var root = location.protocol + "//" + location.host + Backbone.history.options.root; 
     if (href.prop && href.prop.slice(0, root.length) === root) { 
      evt.preventDefault(); 
      var route = href.attr; 

      // language retrieval 
      var lang = navservice.getUserLanguage(route); 

      if(lang && route.slice(0,lang.length+1) === "/" + lang) { 
       route = route.slice(lang.length+1); 
      } 

      Backbone.history.navigate(route, {trigger : true}); 
     } 
    }); 
} 

</script> 

答えて

0

実際、私はbackbone.jsの中にログを追加して何が起きているのかを調べることで修正することができました。

実際の問題は、ルート定義で「プレフィックス」変数を​​使用することにありました。私はそれを削除し、ほとんどの修正が行われました。

+0

問題の原因が分かっていますか? – vassiliskrikonis

+0

実際には、「ルート」変数がどのように機能していたかはわかりませんでした。そしてこれが問題でした。私が理解する限り、URLは[ドメイン名] + [ルート] + [ルート]のように管理されます。だから私は単に自分のコードから "接頭辞"を削除し、それを根に入れます。そしてこれはそれです! – MrFlo

0

history rootオプションを使用し、その後、貴様のテンプレートを作成します。

Backbone.history.start({pushState: true, root: "/en/"}) 

詳細情報backbone history startを。

関連する問題