Mustache.js: オプションの远加䞍明な倉数に関する譊告

䜜成日 2016幎09月14日  Â·  18コメント  Â·  ゜ヌス: janl/mustache.js

倉数名にタむプミスをするこずがありたす自動提案を䜿甚する堎合でも。
空の文字列を返すのではなく、mustache-jsが「䞍明な」倉数に察しお譊告を生成するように構成があれば玠晎らしいでしょう仕様に準拠しおいたすが。

口ひげのマンペヌゞには次のように曞かれおいたす。
By default a variable "miss" returns an empty string. This can usually be configured in your Mustache library. The Ruby version of Mustache supports raising an exception in this situation, for instance.

最も参考になるコメント

ハヌド゚ラヌが望たしいので、たずえば、Expressで䜿甚するず、゚ンドナヌザヌが誀っおレンダリングされたペヌゞを衚瀺しおいるずきにログだけでなく500応答になりたす欠萜しおいる方法によっおは、非垞に誀っおレンダリングされる可胜性がありたす。倉数が䜿甚されるこずになっおいた; これは、500ペヌゞがどれだけ優れおいるかず、誀っおレンダリングされたペヌゞがアプリケヌションの機胜にどれほど悪いかによっおは、ロヌカル開発よりも本番環境でさらに圹立぀可胜性がありたす。 セクションを䜿甚するず、盎接䜿甚するためのハヌド゚ラヌがあっおも、テンプレヌトが欠萜しおいる倉数を無芖できる可胜性がありたす。 たた、問題をログに蚘録する必芁のある高レベルの䜿甚は、ログシステムの制埡䞋にあるため、たずえば、Mustacheの内郚譊告メカニズムがテストランナヌからの出力を壊しおしたうこずなどに぀いお心配する必芁はありたせん。

https://github.com/ScottFreeCode/mustache.jsに実甚的なプロトタむプがあり

党おのコメント18件

ロヌカルで開発しおいる間、他のフレヌムワヌクからこの機胜が倧奜きなので、私から+1しおください パフォヌマンスぞの圱響を最小限に抑えるか、たったく圱響を䞎えないこずが重芁だず思いたす。 コアをそのたたにしおおくこずもできるのでしょうか たずえば、開発䞭にこの皮の動䜜を有効にするために、いく぀かの内郚メ゜ッドをオヌバヌラむドしたす。

たぶんmustache.dev.jsビルドが䜿甚しおいるmustache.jsずチェック・ロゞックを含む関数のオヌバヌラむドを

ハヌド゚ラヌが望たしいので、たずえば、Expressで䜿甚するず、゚ンドナヌザヌが誀っおレンダリングされたペヌゞを衚瀺しおいるずきにログだけでなく500応答になりたす欠萜しおいる方法によっおは、非垞に誀っおレンダリングされる可胜性がありたす。倉数が䜿甚されるこずになっおいた; これは、500ペヌゞがどれだけ優れおいるかず、誀っおレンダリングされたペヌゞがアプリケヌションの機胜にどれほど悪いかによっおは、ロヌカル開発よりも本番環境でさらに圹立぀可胜性がありたす。 セクションを䜿甚するず、盎接䜿甚するためのハヌド゚ラヌがあっおも、テンプレヌトが欠萜しおいる倉数を無芖できる可胜性がありたす。 たた、問題をログに蚘録する必芁のある高レベルの䜿甚は、ログシステムの制埡䞋にあるため、たずえば、Mustacheの内郚譊告メカニズムがテストランナヌからの出力を壊しおしたうこずなどに぀いお心配する必芁はありたせん。

https://github.com/ScottFreeCode/mustache.jsに実甚的なプロトタむプがあり

うヌん、オブゞェクトの存圚をif  {{#thing}} ずしお䜿甚するず、゚ラヌがスロヌされたすか これはかなり䞀般的だず思いたす

たたは、倉数の実際のレンダリング {{ id }} のみが゚ラヌを発生させたすか 䜕を考えおいたのですか

線集面倒にならない堎合に備えお、メゞャヌでデフォルトで有効にするために+1する非垞にクヌルな機胜。

私の考えでは、最初ぱラヌであり、2番目は「譊告」である必芁がありたす。
どちらの堎合も、欠枬倀があるこずを知りたいず思いたす。

2番目のケヌスでは、技術的には壊れないかもしれたせんが、ペヌゞに倧きな圱響を䞎える可胜性がありたす。

たた、逆の方法もいいでしょう。未䜿甚の倉数 しかし、それはもっず倧きな圱響を䞎えるず思いたす NS

2016幎11月8日、1419で、デビッド・ダ・シルバの[email protected]は曞きたした

うヌん、オブゞェクトの存圚をif{{thing}}ずしお䜿甚するず、゚ラヌがスロヌされたすか これはかなり䞀般的だず思いたす

たたは、倉数{{id}}の実際のレンダリングのみで゚ラヌが発生したすか 䜕を考えおいたのですか

—
スレッドを䜜成したため、これを受け取っおいたす。
このメヌルに盎接返信するか、GitHub https://github.com/janl/mustache.js/issues/599#issuecomment -259133973で衚瀺するか、スレッドをミュヌトしおくださいhttps://github.com/notifications/unsubscribe-auth/ AJ8FmSptdhysYrQpg1ODkIrm12A_TXcYks5q8HbbgaJpZM4J8lKe。

私の考えでは、最初ぱラヌであり、2番目は「譊告」である必芁がありたす。
どちらの堎合も、欠枬倀があるこずを知りたいず思いたす。

@MatthijsZwなるほど。 プロパティのnull倀を栌玍できるこずを思い出したした。これは良いこずであり、したがっお䟋倖は発生したせん。 特にif堎合はこれに蚀及したす

線集私の珟圚の立堎は、䞡方でErrを奜むずいうこずです。 私は䞀貫した動䜜を奜みたす。空の欠枬倀にはnullの䜿甚を匷制したすが、これは望たしいず思いたす。

たた、逆の方法もいいでしょう。未䜿甚の倉数 しかし、それはもっず倧きな圱響を䞎えるず思いたす NS

テンプレヌトが期埅しおいるデヌタのスキヌマをなんずかしお取埗し、それを䜿甚しおGraphQLク゚リなどを生成するのはクヌルだず思いたす。

さらに考えおみるず、ここでの問題の䞀郚は、欠萜しおいるデヌタが無効であるずいうこずだず思いたす。なぜなら、テンプレヌトがそのデヌタを期埅しおいる堎合に限りたす。 したがっお、テンプレヌトが単玔に衚瀺するだけの欠萜デヌタは、そのロゞックでは垞に無効ですが、テンプレヌトは、特定のデヌタが利甚可胜であるず期埅し、ある皮の真/停フラグずしお分岐する可胜性があるず考えられたす぀たり、欠萜しおいるほど停ではなく、したがっおその期埅を満たしおいない堎合は無効ですが、別の堎合は、デヌタが利甚可胜かどうかを期埅し、利甚可胜かどうかで分岐する可胜性がありたすこの堎合、無効になるこずはありたせん。

その芳点では、これを制埡するためにnullを䜿甚するこずは、私にはあたり意味がありたせん。

  • デヌタが間違っおいる堎合期埅に応えおいない堎合、間違ったデヌタを凊理するこずに関するテンプレヌトの動䜜を制埡するために、間違ったデヌタをどのように期埅できたすか
  • ずにかく、期埅は本圓にテンプレヌトにありたす。
  • nullは、デヌタを期埅し、デヌタが欠萜しおいるこずは無効であるず芋なす真実性の分岐の誀った倀である可胜性がありたすが、それでも、デヌタが提䟛されたかどうかを正確に分岐する必芁がありたす。デヌタが入力されない可胜性があるこずを期埅したすSQLなどの欠萜デヌタにnullを䜿甚する゜ヌスからのものでない限り、 nullでも入力されたせん。 nullを欠萜しおいるものずしお扱うか、デヌタ゜ヌスに基づいお構成可胜にする必芁がありたす。

テンプレヌト偎の期埅が異なるため、必芁なのは2皮類のブランチです。 私の知る限り、蚀語に䟝存しないMustache仕様では、欠枬デヌタが゚ラヌであるかどうかの構成が可胜ですが必須ではありたせん、別の皮類のブランチには䜕もありたせん。この点で異なりたす。 うヌん...


反察に、私は珟圚、無関係/䜙剰/未䜿甚のデヌタは実際にはデヌタが無効であるずいう問題ではなく、アプリケヌション/デヌタ/でそのデヌタを䜿甚しない堎合はテンプレヌトが無効であるずいう問題であるず考えおいたす。モデルはそれが䜿甚されるこずを期埅しおいたす。 ぀たり、䞀郚のものが朜圚的に䜿甚可胜であるが、テンプレヌトがそれが関連するかどうかを刀断できる堎合、テンプレヌトがそのものを印刷するかどうかは問題ではありたせんが、䞀郚のものが本圓にナヌザヌに衚瀺される必芁がある堎合、テンプレヌトは衚瀺されたせん。゚ラヌだず衚瀺したす。 䞀皮の逆転ずしお、期埅倀はテンプレヌトの倖偎モデル内にあり、その期埅倀を満たさないこずの無効性はテンプレヌトにありたす。 おそらくそれずは別に取り組むのが最善だず思いたす。


以䞊のこずは、匷い意芋が匱いず思いたす。

null倀を存圚しない倀ずしお解釈するIMOは間違っおいたす。

{ name: null }

そのオブゞェクトには、停の倀を持぀nameプロパティがあるため、無効ず芋なされるべきではなく、スロヌする理由にもなりたせん。

より適切なチェックは、 mustache.hasPropertyのように、芁求されたプロパティが定矩されおいるかどうかをチェックするこずです。

しかし、別の方法では、デヌタが利甚できる堎合ずできない堎合があり、利甚できるかどうかで分岐する堎合がありたすこの堎合、デヌタが無効になるこずはありたせん。

私が䌝えようずしおいたのは、キヌX たずえば、 {{#X}} に応じお分岐する堎合、提䟛されるデヌタには、キヌX倀が含たれおいる必芁があるずいうこずです。停の倀ですが、 undefinedはありたせん。

  • null 、「ええ、私は䟡倀がないこずを知っおいたす。私は䟡倀がないこずを明瀺的にマヌクしおいたす」を意味したす。
  • undefinedほずんどの堎合、キヌXが定矩されおいないこずを意味したす undefined倀でキヌを定矩する堎合は、 nullを䜿甚する方がよいでしょう 。 たた、キヌが定矩されおいない堎合は、デヌタの宣蚀が「怠惰」であるたずえば、オブゞェクト参照が䞍足しおいるずきにnullを䜿甚しないか、人為的゚ラヌタむプミス、スリップ、混乱が原因です。

したがっお、この堎合、゚ラヌをスロヌするこずには利点がありたす。 倀がundefinedキヌで分岐しようずしおいたす

もう1぀のケヌスでは、 undefinedたたはnullいずれかをレンダリングしようずしおいたすが、そのナヌスケヌスがあるかどうかはわかりたせん。 たぶん、その1぀でも゚ラヌ。

SQLなどの欠萜デヌタにnullを䜿甚する゜ヌスからのものでない限り

Afaik、Mustacheの哲孊は、モデルをそのたた䜿甚するのではなく、モデルから「ビュヌ」を生成するこずです。 プロバむダヌが䜕らかの理由で远加しない堎合に備えお、 null远加できたす。

私は珟圚、無関係/䜙剰/未䜿甚のデヌタは実際にはデヌタが無効であるずいう問題ではなく、アプリケヌション/デヌタ/モデルが期埅するずきにそのデヌタを䜿甚しない堎合はテンプレヌトが無効であるずいう問題であるず考えおいたす利甚される

うヌん、提䟛されたすべおのデヌタを䜿甚しないのはかなり䞀般的だず思いたす。 私が提案したGraphQLク゚リ生成のように、䞻にツヌルの優れた機胜のためにアむデアを投入したした。

本圓にナヌザヌに衚瀺する必芁があるものがある堎合、テンプレヌトに衚瀺されない堎合ぱラヌです

しかし、誰が/䜕が「本圓にナヌザヌに衚瀺する必芁があるもの」を決定するのでしょうか。 私が掚枬しおいるテンプレヌトラむタヌ ビュヌ内のすべおのデヌタを䜿甚するようにナヌザヌに匷制するず、レンダリングするテンプレヌトごずに調敎されたビュヌを生成するように匷制されたす。

泚私のナヌスケヌスは、分岐なしの手動セットアップでした。

「他の人」に手動でデヌタむベントを䜜成しおもらいたした。その堎合、すべおのフィヌルドに入力したか、倉数名にタむプミスをしたかを確認する方法がありたせんでした。

私のテンプレヌトは「{{event.date}}の{{event.name}}」ず蚀うでしょう。 その堎合、倀が欠萜しおいるず恐ろしいペヌゞが䜜成されたす。
すべおのフィヌルドが必須だったため、{{event.date}}を衚瀺しないロゞックを远加しおも意味がありたせん。

この堎合、「䜿甚されおいない」倉数も知っおおくず䟿利です。タむプミスや、ペヌゞに「魔法のように」衚瀺されるず考えお远加したアむテムを再確認しおください:)

このナヌスケヌスはどういうわけかMustacheのむデオロギヌに違反しおいるず思いたすが、それは実際のシナリオです。
たた、䞡方の状況欠萜倀+未䜿甚の倀で譊告が生成されるず䟿利です。

2016幎11月9日、10時53分で、デビッド・ダ・シルバの[email protected]は曞きたした

しかし、別の方法では、デヌタが利甚できる堎合ずできない堎合があり、利甚できるかどうかで分岐する堎合がありたすこの堎合、デヌタが無効になるこずはありたせん。

私が䌝えようずしおいたのは、キヌXに応じお分岐する堎合{{#X}}など、提䟛されるデヌタには、キヌXの倀が真たたは停の倀である必芁がありたすが、間違いなく未定矩ではないずいうこずです。

nullは、「ええ、私は䟡倀がないこずを知っおいたす。私は䟡倀がないこずを明瀺的にマヌクしおいたす」を意味したす。
undefinedは、ほずんどの堎合、キヌXが定矩されおいないこずを意味したすundefinedの倀でキヌを定矩する堎合は、nullを䜿甚する方がよいでしょう。 たた、キヌが定矩されおいない堎合は、デヌタを「遅延」宣蚀しおいるたずえば、オブゞェクト参照が䞍足しおいるずきにnullを䜿甚しおいないか、人為的゚ラヌタむプミス、スリップ、混乱が原因です。
したがっお、この堎合、゚ラヌをスロヌするこずには利点がありたす。 倀が未定矩のキヌで分岐しようずしおいたす

䞀方、未定矩たたはnullのいずれかをレンダリングしようずするず、そのナヌスケヌスがあるかどうかがわかりたせん。 たぶん、その1぀でも゚ラヌ。

SQLなどの欠萜デヌタにnullを䜿甚する゜ヌスからのものでない限り

Afaik、Mustacheの哲孊は、モデルをそのたた䜿甚するのではなく、モデルから「ビュヌ」を生成するこずです。 プロバむダヌが䜕らかの理由で远加しない堎合に備えお、nullを远加できたす。

私は珟圚、無関係/䜙剰/未䜿甚のデヌタは実際にはデヌタが無効であるずいう問題ではなく、アプリケヌション/デヌタ/モデルが期埅するずきにそのデヌタを䜿甚しない堎合はテンプレヌトが無効であるずいう問題であるず考えおいたす利甚される

うヌん、提䟛されたすべおのデヌタを䜿甚しないのはかなり䞀般的だず思いたす。 私が提案したGraphQLク゚リ生成のように、䞻にツヌルの優れた機胜のためにアむデアを投入したした。

本圓にナヌザヌに衚瀺する必芁があるものがある堎合、テンプレヌトに衚瀺されない堎合ぱラヌです

しかし、誰が/䜕が「本圓にナヌザヌに衚瀺する必芁があるもの」を決定するのでしょうか。 私が掚枬しおいるテンプレヌトラむタヌ ビュヌ内のすべおのデヌタを䜿甚するようにナヌザヌに匷制するず、レンダリングするテンプレヌトごずに調敎されたビュヌを生成するように匷制されたす。

—
あなたが蚀及されたのであなたはこれを受け取っおいたす。
このメヌルに盎接返信するか、GitHub https://github.com/janl/mustache.js/issues/599#issuecomment -259374603で衚​​瀺するか、スレッドhttps://github.com/notifications/unsubscribe-auth/をミュヌトしたす

このナヌスケヌスはどういうわけかMustacheのむデオロギヌに違反しおいるず思いたすが、それは実際のシナリオです。 たた、䞡方の状況欠萜倀+未䜿甚の倀で譊告が生成されるず䟿利です。

どちらも実行可胜のようです。 CIに圹立぀可胜性がありたす。

デバッグのために、パラメヌタヌをビュヌに盎接衚瀺したいず思いたす。

私のナヌスケヌスは少し異なりたす。Mustacheを䜿甚しお、Gulpを䜿甚しおTerraformテンプレヌトを倉換したす。 倉数が欠萜しおいるず、特に自由圢匏の文字列に眮き換えるずきに、むンスタンスが正しく起動しない可胜性がありたす。 私はこの機胜を取埗するための簡単なモンキヌパッチを思い぀いたが、それはほずんど理想的ではない

var mustache = require("mustache");

var errors = [];
var lookup = mustache.Context.prototype.lookup;

mustache.Context.prototype.lookup = function(name) {
    var value = lookup.bind(this)(name);

    if (value === undefined) {
        console.error("Unknown symbol", name);
        errors.push(name);
    }

    return value;
}

var render = mustache.render;

mustache.render = function(template, view, partials) {
    var result = render.bind(this)(template, view, partials);

    if (errors.length > 0) {
        throw {message: "Unknown symbols: " + errors.join(", ")};
    }

    return result;
}

ノヌト

  • 行番号や完党修食蚘号名は衚瀺されたせん
  • マルチスレッド環境で䜜業しおいる堎合は、おそらく完党に安党ではありたせん

しかし、それは私の目的にはうたく機胜し、必芁に応じお誰かがそれを適応させるこずができるず確信しおいたす。

あらゆる皮類の構成管理環境でテンプレヌト゚ンゞンずしお口ひげを䜿甚するには、倉数が欠萜しおいる堎合にハヌド゚ラヌが必芁です。 @steverukutsに䌌たナヌスケヌスが

@stefanegを曞いた数か月埌、実際、TerraformがJSON圢匏で蚘述された構成をサポヌトしおいるこずを発芋したので、Mustacheを䜿甚する代わりにこれを䜿甚したす。 これははるかに優れおおり、よりプログラム可胜です。 これに察するMustacheの䜿甚は非掚奚になり、デプロむメントパむプラむンの次のリビゞョンで削陀される予定です。

Kubernetesのデプロむドキュメントを芋るず、これらはYAMLファむルであるこずがわかりたす。 ほずんどのプログラミング蚀語にはYAMLの読み取りず曞き蟌みが可胜なラむブラリがあるため、代わりにこれを行うこずをお勧めしたす。 私の実隓から、機械可読圢匏を操䜜しようずするず、ほずんどの堎合、Mustacheよりも優れたオプションがあるこずがわかりたした。

泚意Mustacheはもう䜕にも䜿甚しおいたせんが、これは有効な機胜リク゚ストであるず感じおいたす。

解決策は、同じ構文をサポヌトするハンドルバヌを䜿甚するこずです。たた、このナヌスケヌスで必芁ずされる厳密なオプションもありたす。

@steverukutsサポヌトする必芁のある事前正しいです。 オヌプン゚ンドの構成ツヌルの堎合、柔軟性が非垞に速くなるため、テンプレヌトを䜜成する必芁がありたす。 任意の堎所に任意の倀を挿入するこずをサポヌトするツヌルを曞いおみおください...すぐにテンプレヌト゚ンゞンができたした。

仕事では、ここ数幎、Kubernetesリ゜ヌスを構成するためにkontemplateを䜿甚しおいたす。 これは基本的にgoテンプレヌト゚ンゞンであり、そのプロゞェクトの小枝やカスタム機胜からいく぀かの䟿利な機胜を備えおいたす。 たずえば、ヘルムよりも軜量なアプロヌチずしお䜜成されおいたす。

䞊蚘の議論に関連しお; たた、未知の倉数で爆発したす。

解決策は、同じ構文をサポヌトするハンドルバヌを䜿甚するこずです。たた、このナヌスケヌスで必芁ずされる厳密なオプションもありたす。

この問題により、ハンドルバヌも䜿甚せざるを埗なくなりたした。 これが口ひげでサポヌトされおいないのは残念です。

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡