0

関数全体をここに貼り付けます。ちなみに、このスクリプトでは口ひげのテンプレート ライブラリを使用しましたが、この質問では必要ありません。

tmplReplaceContent : function(json, tmpl, target){
    var regex = new RegExp("\{{[a-zA-Z\.\_]*\}}");
    var template = '';
    var view = '';
    /* json -> check if object */
    if (typeof json == 'object') {
        view = json;
        if(!regex.test(tmpl)){
            /* get mustache tmpl from the path */
            $.get(msi.vars.tmpl_url + tmpl + '.mustache', function(tmplOut){
                template = tmplOut;
                var content = Mustache.render(template, view);
                $(target).html(content).hide().fadeIn();
            });
        } else {
            template = tmpl;
            var content = Mustache.render(template, view);
            $(target).html(content).hide().fadeIn();
        }
    } else {
        /* getJSON from the path */
        $.getJSON(msi.vars.base_url + json, function(jsonOut){
            view = jsonOut;
            if(!regex.test(tmpl)){
                /* get mustache tmpl from the path */
                $.get(msi.vars.tmpl_url + tmpl + '.mustache', function(tmplOut){
                    template = tmplOut;
                    var content = Mustache.render(template, view);
                    $(target).html(content).hide().fadeIn();
                });
            } else {
                template = tmpl;
                var content = Mustache.render(template, view);
                $(target).html(content).hide().fadeIn();
            }
        });
    }

非同期であるために Ajax の成功でローカル変数を割り当てることができないため、短くして繰り返しコードを削除することができませんでした。私は約15時間インターネットをさまよいました。しかし、まだ運がありません。

繰り返しコードを削除して、これを短くするにはどうすればよいですか?

4

2 に答える 2

1

まあ、コードが重複している場合は関数があります:)

キックのために、これを含める方法は次のとおりです。

tmplReplaceContent : function(json, tmpl, target){

    function render(tmplOut) {
        template = tmplOut;
        var content = Mustache.render(template, view);
        $(target).html(content).hide().fadeIn();
    }

    var regex = new RegExp("\{{[a-zA-Z\.\_]*\}}");
    var template = '';
    var view = '';
    /* json -> check if object */
    if (typeof json == 'object') {
        view = json;
        if(!regex.test(tmpl)){
            /* get mustache tmpl from the path */
            $.get(msi.vars.tmpl_url + tmpl + '.mustache', render);
        } else {
            render();
        }
// Etc...

ものをかなり短縮しますよね?

于 2012-12-22T14:42:28.137 に答える
1
tmplReplaceContent : function(json, tmpl, target) {

  var regex = new RegExp("\{{[a-zA-Z\.\_]*\}}"),
      view = '';

  function setOutput(template) {
      var content = Mustache.render(template, view);
      $(target).html(content).hide().fadeIn();
  }

  function doJSON(json) {
      view = json;
      if(!regex.test(tmpl)){
          /* get mustache tmpl from the path */
          $.get(msi.vars.tmpl_url + tmpl + '.mustache', setOutput);
      } else {
          setOutput(tmpl);
      }
  }

  /* json -> check if object */
  if (typeof json === 'object') {
    doJSON(json);
  } else {
      /* getJSON from the path */
      $.getJSON(msi.vars.base_url + json, doJSON);
}
于 2012-12-22T14:46:38.627 に答える