Как передать Javascript обратную ссылку на ключ или функцию? - PullRequest
3 голосов
/ 07 декабря 2010
<script type='text/javascript'>

 // I have template and info
 var img_template = "<img src='{src}' width='{width}' height='{height}' title='{title}' />";
 var img_info = {
  src : 'http://myimage.com/img.jpg',
  width: '100px',
  height: '100px',
  title: 'My Image'
 }

 // I want to put info to template but It's not work.
 // How should I do ?
 var my_image = img_template.replace(/{(.+?)}/g, img_info['$1']);

</script>

Ответы [ 4 ]

4 голосов
/ 07 декабря 2010

Используйте функцию для замены:

<script type='text/javascript'>
 var img_template = "<img src='{src}' width='{width}' height='{height}' title='{title}' />";
 var img_info = {
  src : 'http://myimage.com/img.jpg',
  width: '100px',
  height: '100px',
  title: 'My Image'
 }

 var my_image = img_template.replace(/{(.+?)}/g, function(a,b){
      return img_info[b];
 });
</script>
1 голос
/ 07 декабря 2010
var my_image = img_template.replace(/{(.+?)}/g, function(m,v){return img_info[v];});

пример в http://www.jsfiddle.net/gaby/3Lu4h/

Подробнее об использовании функции в качестве параметра для метода замены

0 голосов
/ 07 декабря 2010

Вам нужна функция обратного вызова для replace().

var img_template = "<img src='{src}' width='{width}' height='{height}' title='{title}' />";
var img_info = {
  src : 'http://myimage.com/img.jpg',
  width: '100px',
  height: '100px',
  title: 'My Image'
};

// callback function will be executed for each match
var my_image = img_template.replace(/{([^}]+)}/g, function(match, group1) {
  // return lookup value or the empty string
  return img_info[group1] || "";
});

или в форме многократного использования:

function HtmlTemplate(html) {
  this.template = html;
  this.render   = function(info) {
    return this.template.replace(/{([^}]+)}/g, function(match, group1) {
      return info[group1] || "";
    });
  };
}

var imgTemplate = new HtmlTemplate("<img src='{src}' width='{width}' height='{height}' title='{title}' />");

// later

var img = imgTemplate.render(img_info);
0 голосов
/ 07 декабря 2010
var my_image = img_template.replace(/{(.+?)}/g, function(match, group1){
  return img_info[group1];
});
...