3

次のシナリオがあります。

  1. サーバー側でweb2pyを使用しています
  2. いくつかのember.jsページを提供しています
  3. 現在、これらのember.jsページはiframe内にあります。これは、ember.jsとweb2pyがテンプレート{{}}マークと競合するためです。つまり、web2pyテンプレートとember.jsテンプレートを簡単に混在させることはできません。
  4. だから私はヘルパークラスのソリューションを実装しました:class em(DIV)
  5. ここで、元のemberタグ付きhtmlファイルを処理し、emタグ付きファイルを作成して、ember.jsとweb2pyテンプレートシステムをまとまりのあるユニットに統合したいと思います。

そのために{{XXX}}は、ember.jsファイル内のすべてのインスタンスを{{= em('XXX')}}に変更する必要があります。これには、複数行にまたがるインスタンスも含まれます。ここで正規表現を使用することを考えていますが、車輪の再発明を避けたいと思います(そして奇妙なコーナーケースを処理する必要があります)

これらの種類のテンプレートを解析するPythonの一般的な方法を考えてみてください。{{開始と終了の区切り文字(および}})を探し、、を入れ、改行を処理=em('XXX')、形式を保持する(つまり、改行がある場合は保持する)だけです。

注:これは実際にはember.js固有ではありません。複数行の区切り文字ベースのテンプレートシステムに適用できます。

4

2 に答える 2

3

トランクバージョンのweb2py(数日中にweb2py 2.0としてリリースされる予定)では、テンプレートにカスタム区切り文字を指定できるようになりました。これにより、残り火と競合しないようにweb2py区切り文字を変更できます。 js区切り文字。たとえば、モデルファイルでは次のようになります。

response.delimiters = ['{%', '%}']

次に、web2pyテンプレートで、次のことができます。

{%=P('hello world')%}
<p>{{ember template code}}</p>
{%=P('{{ember template code generated by web2py}}')%}

これは以下を生成します:

<p>hello world</p>
<p>{{ember template code}}</p>
<p>{{ember template code generated by web2py}}</p>

リクエストごとにresponse.delimitersが設定されるため、すべてのページでweb2py区切り文字を変更せず、残り火コードを含むページのみを変更する場合は、条件付きでresponse.delimitersを設定できます(特定のアクションで設定することにより)。それが必要な場合、または要求されたコントローラーやモデルファイル内の機能をチェックすることによって)。たとえば、モデルファイルでは次のようになります。

if request.function in ['action1', 'action2', 'action3']:
    response.delimiters = ['{%', '%}']

またはコントローラー内:

def action1():
    response.delimiters = ['{%', '%}']
    [etc.]
于 2012-08-26T13:23:21.400 に答える
0

すべてのEmber.jsのものを別々のファイルに保持し、web2pyテンプレートと混合しないというアプローチを試す価値があるかもしれません。幸い、Ember.jsでは簡単にそれを行うことができます。

于 2012-08-26T20:28:52.767 に答える