2016-11-14 4 views
0

でカスタムステンシルタグを使用して、私は単純なカスタムタグ登録:ステンシルマニュアルの指示に従いKitura

let ns = Namespace() 

ns.registerSimpleTag("contact") { context in 
    return "<a href=\"/contact\">contact us</a>" 
} 

をしかしresponse.renderだけ取るように私は、renderに名前空間を渡す方法を見ることができません実際のContextオブジェクトではありません。

私には何が欠けていますか?自分自身を作成するのではなく、既存の名前空間がどこかにあるはずですか?

答えて

1

https://github.com/IBM-Swift/Kitura-StencilTemplateEngineをフォークしてKituraStencilTemplateEngine.swiftに変更することができます。

StencilTemplateEngine.render(でのごNS名前空間を定義してあることをリターンコードの行を変更します。その後、あなたのフォークにタグを追加し、に依存関係として、あなたのフォークを使用

return try template.render(Context(dictionary: context), namespace: ns) 

Package.swift

+0

「class StencilTemplateEngine」を変更する必要があることを確認していただきありがとうございます。私はそれをあなたの提案する方法とは少し違ってやっていましたし、現在は実用的な解決策を持っています。 – MacAvon

+0

@MacAvonここでの理論的根拠は、ステンシルテンプレートエンジンをカスタマイズすることです。カスタムタグを使用すると、別のテンプレートエンジンと見なすことができます。独自のバージョン管理など、独自の_Kitura-MyCustomizedStencilTemplateEngine_リポジトリを作成し、複数のKituraアプリケーションに使用することができます。 _Kitura-MyCustomizedStencilTemplateEngine_は、[Kitura TemplateEngine protocol](https://github.com/IBM-Swift/Kitura-TemplateEngine/blob/master/Sources/KituraTemplateEngine/TemplateEngine.swift)を実装し、すべてのユーザーにステンシルに必要なカスタマイズを追加しますあなたのKituraアプリ。 –

関連する問題