ASP.NET WebForms ko.mapping未定义

时间:2015-07-07 15:10:41

标签: javascript jquery asp.net knockout.js knockout-mapping-plugin

我不能为我的生活弄清楚为什么ko.mapping是未定义的。

我正在使用以下JS库:

  • jquery的
  • 敲除
  • knockout.mapping
  • fullcalendar
  • 数据表
  • datatables.columnFilter
  • dataTables.scroller
  • jquery.blockUI

我尝试过以下操作(每次更改后都会进行硬刷新):

  1. 我已经将每个组合中的js文件重新排序。 (想想也许在加载库之前调用就绪函数)
  2. 删除了其他JS库(想想可能存在某种冲突)
  3. 交换本地文件以获取对knockout-mapping的cdn引用
  4. 创建一个新文件并在其中添加knockout和knockout映射并将其添加到脚本中以包含
  5. 将组合文件的文件名更改为不包含单词映射(我想也许文件名有些奇怪)
  6. 有趣的是,我能够实现这一目标的唯一两种方法是

    如果我将敲除映射复制粘贴到淘汰库文件中(但是具有不同名称但完全相同内容的新文件没有)。

    OR

    我实际上最终做的是以下内容:

    $(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从未被定义为任何东西。

1 个答案:

答案 0 :(得分: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);
});