使用带有Require.js的knockout.simpleGrid.3.0.js

时间:2014-03-13 09:39:49

标签: javascript knockout.js requirejs

我在网站上使用了带有淘汰赛的require.js,并希望使用此链接中的simpleGrid示例http://knockoutjs.com/examples/grid.html但是我不能将kncokout.simpleGrid.3.0.js包含在Require中。

我尝试用

包装插件
define(['jQuery', 'knockout'], // Require knockout
    function($, ko) {

   });

这似乎不适用于模板出现问题。

任何帮助表示赞赏

2 个答案:

答案 0 :(得分:0)

在你的require配置中,你应该创建一个simpleGrid库的路径,并使用shim告诉它它依赖于Knockout,以便你的库以正确的顺序加载。这是一个例子:

var require = {
    paths: {
        'jquery': 'lib/vendor/jquery-2.0.3',
        'ko': 'lib/vendor/knockout-3.0.0',
        'koSimpleGrid': 'lib/vendor/knockout.simpleGrid.3.0'
    },
    shim: {
        'koSimpleGrid': {
            deps: ['ko']
        },
    }
};

然后你可以复制粘贴来自这样的定义中的示例的视图模型代码:

define(['jquery', 'ko', 'koSimpleGrid'], function ($, ko) {
    // VIEW MODEL GOES HERE
});

答案 1 :(得分:0)

我同意问题似乎与编写网格模板的代码有关。基本上,因为requirejs异步加载模块document.write()无法使用 - 文档的编写已经完成到模块执行时。我认为This StackOverflow answer explains it well

我选择了使用dom方法创建和附加所需的脚本标记模板

templateEngine.addTemplate = function(templateName, templateMarkup) {
  var scriptTag = document.createElement('script');
  scriptTag.type = 'text/html';
  scriptTag.id = templateName;
  scriptTag.text = templateMarkup;
  document.getElementsByTagName('body')[0].appendChild(scriptTag);
};

My amd version is in this gist