2015-03-26 3 views
0

Не знаю, почему мой код не работает, потому что код, который я взял из ниже работает в JSFiddle hereЗамена значения заполнителей в строке

String.prototype.interpolate = (function() { 
 
    var re = /\[(.+?)\]/g; 
 

 
    return function(o) { 
 
    return this.replace(re, function(_, k) { 
 
     return o[k]; 
 
    }); 
 
    } 
 
}()); 
 

 
var _obj = { 
 
    hey: 'Hey', 
 
    what: 'world', 
 
    when: 'today' 
 
} 
 

 
document.write(
 
    '[hey]-hey, I saved the [what] [when]!'.interpolate(_obj) 
 
);

Но мой код ниже не кажется делать то же самое. Он по-прежнему имеет кронштейн значения [NAME] [адрес] [PHONE] и не замененные значения данных:

$(document).ready(function() { 
    $('#goSearching').click(function() { 
     var isNumber = $.isNumeric($('#searchBox').val()); 
     var theSearch = $('#searchBox').val(); 
     var theURL  = ''; 

     if (isNumber) { 
      if (theSearch.length >= 10) { 
       //Search by NPI# 
       $('#titleOfSearchResult').html('P search results by NPI #:'); 
       theURL = 'http://zzzzz.com:151/P/GetNPI/'; 
      } else { 
       //Search by P # 
       $('#titleOfSearchResult').html('P search results by P #:'); 
       theURL = 'http://zzzzzz.com:151/P/GetNo/'; 
      } 
     } else { 
      //Search by P Name 
      $('#titleOfSearchResult').html('P search results by P Name:'); 
      theURL = 'http://zzzzz.com:151/P/PName/'; 
     } 

     $.ajax({ 
      url   : theURL + $('#searchBox').val() + '/', 
      type  : 'GET', 
      dataType : 'xml', 
      timeout  : 10000, 
      cache  : false, 
      crossDomain : true, 
      success  : function (xmlResults) { 
       console.log(xmlResults); 
       var _htmlObj = {}; 

       $(xmlResults).find("P").each(function() { 
        _htmlObj = { 
         NAME : $(this).find("pName").text(), 
         ADDRESS : $(this).find("pSpecialty").text(), 
         PHONE : $(this).find("pUserid").text() 
        } 

        console.log($(this).find("pName").text()); 
        console.log($(this).find("pSpecialty").text()); 
        console.log($(this).find("pUserid").text()); 

        $("#theResults").append(      
         '<p><strong>[NAME]</strong></p>' + 
         '<p>[ADDRESS]</p>' + 
         '<p>[PHONE]</p>' + 
         '<p>&nbsp;</p>'.interpolate(_htmlObj)   
        ); 
       }); 
       }, 
      error  : function(jqXHR, textStatus) { 
       console.log("error: " + textStatus); 
       } 
     }); 
    }); 

    String.prototype.interpolate = (function() { 
     var re = /\[(.+?)\]/g; 

     return function (o) { 
      return this.replace(re, function (_, k) { 
       return o[k]; 
      }); 
     } 
    }()); 
}); 

В консоли она выдает правильные возвращаемые значения, но не заменит эти значения с заполнителями [ИМЯ] [АДРЕС] [ТЕЛЕФОН].

Любая помощь в устранении этой проблемы была бы замечательной! Благодаря!

+0

Вы используете функцию «интерполяция» только в последней строке. –

+0

. Любая конкретная причина, по которой вы не используете «настоящую» систему шаблонов, такую ​​как M ustache, Handlebars, Jade и т. д.? [Есть тонны на выбор ...] (http://garann.github.io/template-chooser/) –

ответ

2

Вы только вызовом interpolate на последней строке

'<p><strong>[NAME]</strong></p>' + 
'<p>[ADDRESS]</p>' + 
'<p>[PHONE]</p>' + 
'<p>&nbsp;</p>'.interpolate(_htmlObj) 

доступа член имеет более высокий приоритет, чем сложение, поэтому оно должно быть:

('<p><strong>[NAME]</strong></p>' + 
'<p>[ADDRESS]</p>' + 
'<p>[PHONE]</p>' + 
'<p>&nbsp;</p>').interpolate(_htmlObj) 

Пример из @TrueBlueAussie: jsfiddle.net/TrueBlueAussie/fFSYA/9

+0

Мог бы также дать вам это: http://jsfiddle.net/TrueBlueAussie/fFSYA/9/ –

+0

@TrueBlueAussie спасибо, я отредактирую это в свой ответ –

+0

Это сработало @MatthewMcveigh. Благодаря! – StealthRT

Смежные вопросы