4

consolidate.jsで使用すると、{{>my_partial}}のように追加された口ひげの読み取りパーシャルを取得できません。エクスプレスアプリケーションは次のようなものから始めます。

ファイルindex.js:

var express = require('express'),
    cons    = require('consolidate'); 

app.configure(function(){

  app.set( 'models',       BACKEND + '/models' );       // Set the models directory
  app.set( 'views',        BACKEND + '/views' );        // Set the views directory
  app.set( 'controllers',  BACKEND + '/controllers' );  // Set the controllers dir


  app.set( 'view engine',  'html' );                // Set Mustache as the templating engine
  app.engine( 'html', cons.mustache );
  app.engine( 'mustache', cons.mustache );

  app.use( app.router );  // Set the router
  app.use( '/public', express.static( BASEPATH + '/frontend/public' ) );  // set frontend/public to /public for users
  app.use( '/js', express.static( BASEPATH + '/frontend/js' ) );
  app.use( '/out', express.static( BASEPATH + '/out' ) ); // documentation path

  // Set client side libraries here (Make them available to the public based on settings.json)
  for(setting in SETTINGS.public) {
    app.use( SETTINGS.public[setting],  express.static(BASEPATH + SETTINGS.public[setting]) );
  }

});

次に、コントローラーのどこかで、次のようにレンダリングを使用します。

function Blog(app, request, response){

  var fs      =  require('fs'), 
      Blog    =  require( app.get('models') + '/blog' ),
      model   =  new Blog(),
      scripts =  fs.readFileSync( VIEWS + '/m_scripts.mustache').toString()     ;

  model.List(function(data){

    response.render('layout', 
      {
        title     :  'My Blog',
        body      :  'Hello Mustache World',
        list      :  data.rows,
        cache     :  false,
        partials  : {
          m_scripts : partialStr
        }
      }
    );

  });

};


exports.list = Blog;

m_scripts.mustacheには次のものがあります。

<script data-src="ergierjgoejoij"></script>

レイアウトテンプレートは問題なくレンダリングされ、パラメータも問題なく通過します。部分的なm_scriptsは、readFileSync()。toString()によって渡されたテキストとともに問題なく渡されますが、HTMLのものはエンコードされ、役に立たなくなります。

私の質問は、layout.mustache {{> m_scripts}}に入れるだけの方法があり、mustacheはm_scripts.mustacheをrender()に渡す必要なしに自動的にロードすることを理解しています。そうでない場合、私は何が欠けていますか?

4

3 に答える 3

3

現時点では、consolidate.jsはパーシャルをサポートしていません。これを修正するためのプルリクエストがありますが、マージされていません:https ://github.com/simov/consolidate.js

私は代わりにそのフォークを使用することになりました:

1)npmアンインストール統合

2)npm install simov / consolidate.js

npm install simov / consolidate.jsは、そのフォークされたバージョンをインストールします。次に、次のことができます。

/**
 * @module Blog Controller
 */ 
function Blog(app, request, response){

  var Blog    =  require( app.get('models') + '/blog' ),
      model   =  new Blog();

  model.List(function(data){

    response.render('layout', 
      {
        title     :  'My Blog',
        body      :  'Hello Mustache World',
        list      :  data.rows,
        cache     :  false
        ,partials  : {
          m_scripts : './backend/views/m_scripts.html'
        }
      }
    );

  });

};


exports.list = Blog;

思ったよりずっと簡単です。代わりにパーシャルへのパスを渡すと、layout.htmlで{{>m_scripts}}を使用できます。

それでも、それを作成する方法があるかどうかはわかりません。デフォルトでは、viewsフォルダーなどで{{>m_scripts}}を探します。それはきちんとしているでしょう。

于 2012-12-22T18:28:34.160 に答える
2

口ひげの代わりにホーガンを使用できます。Hoganはapp.set('partials', partialsPathMap)、パスマップとして設定したパーシャルを使用してテンプレートをレンダリングします。

プロジェクトでこの要点:5149597のコードを使用できます。そうすれば、テンプレートをレンダリングするときに、これ以上部分的な構成は必要ありません。


2014年6月23日編集:

簡単にするために、これを処理するためにnpmを作成しました。ただnpm install mustlayout、リポジトリとドキュメントはここにあります:https ://github.com/mytharcher/mustlayout

于 2013-03-13T05:32:57.737 に答える
0

Consolidateがパーシャルでどのように機能するかを知りたいと思ったので、このトピックに出くわしました。そして、Consolidateがパーシャルをうまく使用できるようになったことを知りました。

  1. ビューフォルダを作成し、index.hbsというファイルを作成します
  2. HTMLのどこかに{{>menuPartial}}という行を追加します
  3. パーシャルと呼ばれるビューのサブフォドラーを作成します
  4. menu.hbsというファイルを作成します

次に、このノードスクリプトを使用して、部分的に機能させることができます。

const express = require('express');
const engines = require('consolidate');


const app = express();
app.engine('hbs', engines.handlebars);
app.set('views', './views');
app.set('view engine', 'hbs');

app.get('/', (request, response) => {
    response.render('index', { partials : { menuPartial : './partials/menu'} });
});

exports.app = functions.https.onRequest(app);
于 2017-08-08T12:05:03.720 に答える