Knockout.js 淘汰赛';在require.js中使用knockout.validation和knockout.mapping时不起作用

Knockout.js 淘汰赛';在require.js中使用knockout.validation和knockout.mapping时不起作用,knockout.js,requirejs,knockout-mapping-plugin,knockout-validation,Knockout.js,Requirejs,Knockout Mapping Plugin,Knockout Validation,因此,我对其进行了测试,发现当我以这种方式设置代码时,subscribe函数从未被调用: app.index.js main.index.js Model.js 如果我删除此代码: require(["ko"], function (ko) { //manually set the global ko property window.ko = ko; //then bring in knockout validation requ

因此,我对其进行了测试,发现当我以这种方式设置代码时,subscribe函数从未被调用:

app.index.js main.index.js Model.js 如果我删除此代码:

require(["ko"], function (ko) {
        //manually set the global ko property
        window.ko = ko;

        //then bring in knockout validation
        require(["knockout.validation"], function () {
            ko.validation.configure({
                insertMessages: false,
                decorateElement: true,
                errorElementClass: 'error'
            });
            require(["main.index"], function (bs) {
                bs.run();
            });
        });
    });
就这样吧:

require(["main.index"], function (bs) {
                    bs.run();
                });

subscription函数确实显示console.log,但使用该代码,将永远不会调用订阅。

代码中存在语法错误:

function ($, ko, mapping, indexViewModel, obj) {
   var
       run = function () {
           var vm = new indexViewModel();
           var array = [];
           $.getJSON("/api/GetData/", function (data) {
                    mapping.fromJS(val.ObjCollection, {
                           create: function (options) {
                               return new Obj(options.data);
                           }
                       }, vm.ObjCollection);
注意,您确实“返回新的Obj”(带大写),但模块作为“Obj”(无大写)注入函数中。这就解释了为什么你从来没有达到这个目标(尽管它不能解释为什么敲除验证与此有关)


如果这对您没有帮助,请在代码的各个部分设置一些断点,然后单步执行。查看问题出现的位置。是整个部分永远不会被触发,还是只是订阅没有被触发?为什么您希望订阅回调首先触发?您先设置值,然后订阅,但是如果您再也不更新该值,则回调不会触发是有意义的。

很抱歉,为了显示示例,我将一些对象名称替换为虚拟名称。但是你是对的,敲除验证与你看到的这个特定错误没有任何关系。订阅的原因是我想在更新这个“属性”时计算另一个值。好吧,但是您发布的代码中没有任何内容触发订阅回调,所以我想知道是什么触发了它。你应该一步一步地检查代码,看看它在哪里停止工作。这两段代码似乎完全不相关,因此现在有一个巨大的缺口,读者无法填补。触发器应该在从客户端更新属性时发生。i、 所以我猜页面仍然正确加载?只是订阅不起作用?在这种情况下,在Obj构造函数中放置一个断点,看看它是否被命中。如果没有,请在getJSON回调中放置一个断点,并查看它是否被命中。如果没有,在调用getJSON之前放置一个断点,看看它是否命中。成功命中的最后一点将恰好在有问题的代码之前。
require(["ko"], function (ko) {
        //manually set the global ko property
        window.ko = ko;

        //then bring in knockout validation
        require(["knockout.validation"], function () {
            ko.validation.configure({
                insertMessages: false,
                decorateElement: true,
                errorElementClass: 'error'
            });
            require(["main.index"], function (bs) {
                bs.run();
            });
        });
    });
require(["main.index"], function (bs) {
                    bs.run();
                });
function ($, ko, mapping, indexViewModel, obj) {
   var
       run = function () {
           var vm = new indexViewModel();
           var array = [];
           $.getJSON("/api/GetData/", function (data) {
                    mapping.fromJS(val.ObjCollection, {
                           create: function (options) {
                               return new Obj(options.data);
                           }
                       }, vm.ObjCollection);