2012-09-25 2 views
14

ビューに出力されるテキストにExtのStringメソッドを使用したいと思います。例えばXTemplate内の関数を呼び出す方法(itemTpl)

itemTpl: [ 
    ... 
    '<tpl switch="post_type">', 
    '<tpl case="new_user">', 
     '<p>{post_text_teaser}</p>', 
     '<p>{timestamp}</p>', 
    '<tpl default>', 
     '<p>' + Ext.String.ellipsis(+ '{post_text_teaser}' + \, 4) + '</p>', 
    ... 
].join(''), 

もちろんライン10に連結が不正です。

可能かどうか、正しく行うにはどうすればよいですか?

+0

@johanと@sra OPでの編集に注意してください - 'itemTpl'の最後に' .join( '') 'があります - これは関数を組み込むときに問題になるでしょうか? – pepe

+0

テンプレートをXTemplateとして実行する限り、これは問題ありません – sra

答えて

18

内の機能を使用することができますmemberfunctions

itemTpl: [ 
    ... 
    '<tpl switch="post_type">', 
    '<tpl case="new_user">', 
     '<p>{post_text_teaser}</p>', 
     '<p>{timestamp}</p>', 
    '<tpl default>', 
     '<p>{[this.doAction(post_text_teaser)]}</p>', 
    ..., 
    { 
     // XTemplate configuration: 
     disableFormats: true, 
     // member functions: 
     doAction: function(name){ 
      return Ext.String.ellipsis(name + "\", 4); 
     } 
    } 
] 
+0

絶対に+1 これはなぜうまくいかないのか説明できますメンバメソッドとは? – sra

+0

会員の機能に関する情報を回答 – zelexir

+0

に追加しました。あなたの提案には、魅力的なように働いていました.-偽のzelexirと@sra – pepe

1

Note: The example below does not work as expected! Look at zelexir answer for clarification!

あなたはこれがあなたの問題を解決する必要がありますが、テンプレート

itemTpl: [ 
    ... 
    '<tpl switch="post_type">', 
    '<tpl case="new_user">', 
     '<p>{post_text_teaser}</p>', 
     '<p>{timestamp}</p>', 
    '<tpl default>', 
     '<p>{[this.concatenate(values.post_text_teaser)]}</p>', 
    ..., 
    { 
     concatenate: function(teaser) { 
       return Ext.String.ellipsis(+ teaser + \, 4); 
     } 
    } 
] 
+0

@johanと同じこと - '、'はエラーを引き起こしています – pepe

+0

@torr ''とラップする必要がありますが、とにかく私のサンドボックスでは、期待通りに動作しない...私はそれをテストし続けます – sra

+0

'join'は '' 'を使いこなすでしょうので、関数の引数の中ではなく' ''にする必要があります...だからエラーを取り除くが、私はまだこれを動作させることができない... – pepe

0

を使用することができます。

'<tpl switch="post_type">', 
     '<tpl case="new_user">', 
      '<p>{post_text_teaser}</p>', 
      '<p>{timestamp}</p>', 
     '<tpl default>', 
      '<p>{[Ext.String.ellipsis(values.post_text_teaser,4,false)]}</p>', 
    '</tpl>' 

あなたが見つけることができるよりでのXTemplateに関する情報

テンプレートメンバー関数を使用すると、通常の方法でitemTplで直接定義することはできませんが、明示的に新しいXTemplateを定義してitemTplで使用する必要があることがわかります。例を参照してください:

var tpl = new XTemplate(
    '<tpl switch="post_type">', 
     '<tpl case="new_user">', 
      '<p>{post_text_teaser}</p>', 
      '<p>{timestamp}</p>', 
     '<tpl default>', 
      '<p>{[this.shorten(values.post_text_teaser)]}</p>', 
    '</tpl>', 
    {   
     shorten: function(name){ 
      return Ext.String.ellipsis(name,4,false); 
     } 
    } 
); 

... 

itemTpl: tpl, 

... 

Senchafiddle example

これは、以下のコード(ちょうど上記のXTemplateからコードを挿入)するように正常に動作する必要があります。

itemTpl: new XTemplate(...), 

Senchafiddle example

、これはそれをsortensことを願っています!

編集は、私は時々、それは彼らなしで動作しますが、それは彼らが(この場合、生成されたコードに不足しているブラケット)面白いのエラーを引き起こす可能性があるとして、常にそれらを使用することをお勧めします、終了タグを逃したhadeことに気づきました。

+0

の上にこの解決策は私に 'Uncaught SyntaxError:Unexpected token 'をコンソールに与えます:(' - 'はエスケープしようとしているものです) – pepe

関連する問題