0

Я не могу на всю жизнь понять, почему ko.mapping не определено.ASP.NET WebForms ko.mapping undefined

Я использую следующие JS библиотеки:

  • Jquery
  • Нокаут
  • knockout.mapping
  • момент
  • fullcalendar
  • DataTables
  • datatables.columnFilter
  • dataTables.scroller
  • jquery.blockUI

Я попробовал следующее (с жесткими обновлениями после каждого изменения):

  1. Я переупорядоченных в JS-файлы в голове каждую комбинацию я Можно. (Мысль, может быть, на готовой функции была вызывается до загрузки библиотеки)
  2. Удалены другие библиотеки JS (думал, может быть, был какой-то конфликт)
  3. Перевернуто локальный файл для справки КДС нокаутировать-отображение
  4. Создал новый файл и помещал в него нокаут и нокаут, добавляя его в скрипты, чтобы включить
  5. Изменено имя файла в объединенном файле, чтобы не включать в себя сопоставление слов (я подумал, может быть, было что-то напуганное о имени файла)

Интересно, что на я мог бы получить эту работу:

Если я скопировал в файл нокаута нокаут-карточку (но новый файл с другим именем, но с тем же содержимым).

ИЛИ

То, что я на самом деле в конечном итоге делает было следующее:

$(document).ready(function() { 
    . 
    . 
    . 
    var loadKnockoutMapping = function() { 
     var s = document.createElement('script'); 
     s.src = '/cstm/JavaScript/knockout.mapping-2.4.1.js'; 
     document.body.appendChild(s); 

     var callbackTimer = setInterval(function() { 
      var mappingIsDefined = false; 
      try { 
       mappingIsDefined = (ko.mapping !== undefined); 
      } catch (e) { } 

      if (mappingIsDefined) { 
       clearInterval(callbackTimer); 
       setupRequestableAssignmentData(); //uses ko.mapping.fromJS function 
      } 
     }, 100); 
    } 
    loadKnockoutMapping(); 
} 

Кто-нибудь есть какие-либо идеи, что происходит здесь? Я даже попробовал просто не добавлять на страницу новый элемент сценария и только функцию таймаута, чтобы ждать, пока ko.mapping не будет неопределенным, но это не сработало. Ko.mapping никогда не определялся ничем.

+0

Я сочувствую вашей ситуации, но я боюсь, что без Repro (который -I ноу- это * действительно * трудно создать для такого рода проблемы) можно прибегнуть только гадать, какой вопрос является. – Jeroen

+0

Вы пытались поднять таймер? Возможно, 100 мс недостаточно долго ждать. –

+1

@ Jeroen да, я думаю, что самая неприятная часть этого - я использовал ту же комбинацию библиотек на другой странице в том же проекте.Возможно, я смогу перестроить страницу по частям, чтобы узнать, могу ли я найти основную причину, а затем отправьте решение здесь. – Corey

ответ

0

Я думаю, что вы «изобретаете» колесо здесь. Для этого есть отличная библиотека. http://requirejs.org/

Это будет обработать загрузку сценария для вас.

requirejs.config({ 
    paths: { 
     jquery: 'libs/jquery.js', 
     knockout: 'libs/knockout.js', 
     knockoutMapping: 'libs/knockoutMapping.js' 
    } 
    shim: { 
     'knockout': { 
      deps: ['jquery'], 
     } 
    } 
}); 


require(["jquery","knockout","knockoutMapping",function($,ko,mapping){ 
    console.log($,ko,mapping); 
}); 
+0

Да, это еще одно хорошее решение для решения проблемы, но на самом деле я бы предпочел включить файл на странице. Как решение, которое я придумал, и это одно и то, и другое будет несовместимым с тем, как работает любая из наших других страниц. Спасибо, хотя, я могу переключить свой взлом на этот – Corey