2011-09-14 17 views
1

最終的な実装方法を正確にはわかりませんが、基本的なことはメソッド引数を文字列 "template"に挿入することです。最初の例では、私は正規表現を置き換えることができますが、これにはいくつかの落とし穴があります。もう1つは少し難しいです。どのようにしてテンプレートから名前を取得し、渡されたオブジェクトから一致するものに置き換えることができますか?助けてくれてありがとう。javascriptメソッドの引数を文字列テンプレートに挿入する

var myTemplate = 'Hello {name}'; // or something similar 
var name = 'Bob'; 
function applyTemplate(tpl,str) { 
    //do stuff here to replace {name} with passed argument 
} 
var newStr = applyTemplate(myTemplate,name); //should return 'Hello Bob' 

//Also this one 
var myTemplate = 'Good {timeOfDay} {name}'; 

function applyTemplate(tpl,o) { 
    //simple objects only, don't need nested 
} 
var newStr = applyTemplate(myTemplate,{name:'Bob',timeOfDay:'morning'}); //should return 'Good morning Bob' 

答えて

1

あなたが&検証をチェックする余分を必要としない場合は、あなただけのようなvalue{key}を置き換えることができます:あなたが持っていないので、あなたの簡単な最初のapplyTemplate機能については

function applyTemplate(tpl,o) { 
    for(var key in o) 
     { 
      if(o.hasOwnProperty(key))// prevent iteration on any prototype inherited methods 
       tpl = tpl.replace('{'+key+'}',o[key]); 
     } 
    return tpl; 
} 

どのようなキーをすべきかについての考え方は、最初に{...}の代わりに正規表現を使用することができます:

そして、もちろん、あなたが引数の型に基づいて、わずかに異なる機能と、1にこれらの二つの機能を組み合わせることができます。

function applyTemplate(tpl,o) { 
    switch(typeof o){ 
     case 'object' : 
      for(var key in o) 
       { 
        if(o.hasOwnProperty(key)) 
         tpl = tpl.replace('{'+key+'}',o[key]); 
       } 
      break; 
     case 'string' : 
      tpl = tpl.replace(/{.*?}/,o); 
      break; 
     default : 
      throw new Error('no valid parameters supplied'); 
    } 
    return tpl; 
} 

これはトリックを行う必要があります。興味がある場合は、jqueryテンプレートシステムでピークを取ることができます:http://api.jquery.com/jQuery.template/

これが役に立った。

+0

素晴らしい!ありがとう!私はオブジェクトのhasOwnProperty()を認識していませんでした。私はちょうどjavascriptの反射を探しています。 jQueryに関しては、SAはそれに対して反対を選択しました。ここからあなた自身をロールバックしてください! – kyle

関連する問題