2010-10-04 2 views
0

У меня есть переменная, которую я использую для кэширования или временного хранения, чтобы избежать повторных запросов на сервер:fcount неопределен

var div2acc = {}; 

Тогда есть эта функция, которая получает массив из службы WCF или читает его из мой div2acc объект:

function getAccounts(div_id){ 
     if(!div2acc.hasOwnProperty(div_id)){ 
       $.ajax({ 
         url: "/Services/OG.svc/GetListOfAccounts", 
         data: { moduleId: mod_id, divisionCode: div_id }, 
         success: function(data){ 
             div2acc[div_id] = data; 
         } 
       }); 
     } 

     $("#pnlAccounts").setTemplate($("#tplAccounts").html()); 
     //alert(div2acc[div_id]); 
     $("#pnlAccounts").processTemplate(div2acc[div_id]); 
     $("#pnlAccounts > ol > li").click(function() { 
       addDesignation($(this).attr("id"), $(this).text(), ""); 
     }); 
} 

проверяется div_id является определенным имуществом, которое будет содержать массив счетов, скопированных из данных переменных. Затем он запускает jTemplates и передает данные, хранящиеся в свойстве div2acc [div_id].

Странно, что при первом запуске getAccounts запускается определенный div_id, я получаю «fcount undefined» в Firebug. Во второй раз он работает отлично и анализирует шаблон. Я решил вставить предупреждение () непосредственно перед обработкой шаблона и посмотреть, что div2acc [div_id] передано processTemplate(). Оказывается, div2acc [div_id] всегда не определено при первом вызове getAccounts (div_id), но во второй раз это нормально. Что еще более странно, когда я вставляю alert() сам, «fcount is undefined» ошибка больше не отображается, и шаблон анализируется с первой попытки, сразу после нажатия «ОК» в окне предупреждения.

Я, очевидно, неправильно понимаю что-то здесь.

ответ

0
function getAccounts(div_id) { 
    if (!div2acc.hasOwnProperty(div_id)) { 
     $.ajax({ 
      url: "/Services/OG.svc/GetListOfAccounts", 
      data: { 
       moduleId: mod_id, 
       divisionCode: div_id 
      }, 
      success: function (data) { 
       div2acc[div_id] = data; 
       getAccounts(div_id); 
      } 
     }); 
    } else { 

     $("#pnlAccounts").setTemplate($("#tplAccounts").html()); 
     //alert(div2acc[div_id]); 
     $("#pnlAccounts").processTemplate(div2acc[div_id]); 
     $("#pnlAccounts > ol > li").click(function() { 
      addDesignation($(this).attr("id"), $(this).text(), ""); 
     }); 
    } 
} 
+0

Это устраняет проблему, которую я предполагаю, имеет отношение к сфере действия, но я до сих пор не понимаю. Однако это создает еще одну проблему, которая заключается в том, что шаблон получает визуализацию только тогда, когда свойство div2acc [div_id] не существует. Тем не менее, я хочу, чтобы шаблон получал визуализацию каждый раз - просто запросите его с сервера, если он еще не был (и затем кеширует его через свойство div2acc). Вот почему я взял эти строки из предложения if() в первую очередь. – alkos333

+0

ОК, попробуйте мое редактирование. – Reigel

+0

Отлично, что сработало. Не могли бы вы объяснить, почему я div2acc не получил его свойство сразу, и getAccounts (div_id) необходимо вызвать снова. Я просто не знаю, что здесь происходит, пытаясь понять проблемы, связанные с определением области. – alkos333