传递返回ko.computed的值的函数(Pass a function that returns

2019-09-22 13:39发布

我有两个函数generatetest 。 当用户点击一个按钮generate被称为然后调用test功能。 我收到以下错误:

通过返回的ko.computed值的函数。

该错误是扔在这条线的测试功能:

var unmapped = ko.mapping.toJS(this); 

this是我的视图模型与ko.observable性能。

这里有两种功能。 如果我移动的含量test功能generate的一切工作正常,但我需要的逻辑是在两个不同的功能。 我能做什么?

我很困在这里。 任何帮助将大大apreciated。

generate = function () {
            if (!omega.validatableFranchiseGeneration.validate()) {
                return false;
            }
            omega.franchiseInfo.IsForGeneration(true);

            test();
        }

 var test = function () {
        getIpsAndPorts();

        for (var i = 0; i < omega.franchiseInfo.LanguagesInfoViewModel().length; i++) {
            if ($.isArray(omega.franchiseInfo.LanguagesInfoViewModel()[i].SubMenuItemsViewModel)) {
                omega.franchiseInfo.LanguagesInfoViewModel()[i].SubMenuItemsViewModel = omega.franchiseInfo.LanguagesInfoViewModel()[i].SubMenuItemsViewModel[0];
            }
        }

        var unmapped = ko.mapping.toJS(this);

        var jsonData = ko.toJSON(unmapped);
        $.ajax({
            url: "/franchise/Save",
            type: "POST",
            // data: ko.toJSON({ folderName: FolderName }),
            data: { franchiseInfoViewModel: jsonData },
            //traditional: true,
            //contentType: "application/json; charset=utf-8",
            dataType: 'json',
            success: function (data, textStatus, xhr) {
                window.location.href = data.redirectToUrl;
            },
            error: function (request, status, error) {
                jsonValue = jQuery.parseJSON(request.responseText);
                omega.franchiseInfo.errorMessages([]);
                for (var i = 0; i < jsonValue.errorMessages.length; i++) {
                    omega.franchiseInfo.errorMessages.push({ errorMessage: ko.observable(jsonValue.errorMessages[i].ErrorMessage) });
                }
                for (var i = 0; i < omega.franchiseInfo.LanguagesInfoViewModel().length; i++) {
                    InitializeViewLanguagesInfo(omega.franchiseInfo.LanguagesInfoViewModel()[i]);
                }
            }
        });
    }   

Answer 1:

在没有看到所有的代码,这是很难确定的,但如果当直接包含在生成的代码(如)的作品,那么我愿意打赌, this是不是你认为这是在test功能。 this有内部不同的含义test功能的确要比里面generate

火了铬或萤火虫和设置断点上var unmapped = ko.mapping.toJS(this); 线。 运行程序,当断点命中去到控制台,并期待在this 。 这是你的ViewModel?

如果this是你希望里面有什么generate ,你可以随时拨打test是这样的:

test.apply(this);

这将明确设置的情况下this为方法调用。

另一种选择是设置一个self你的视图模型中的变量。 这通常是在顶部做,是这样的: var self = this; 。 通过创建这个变量之后就可以引用self' inside any functions within the outer "function" scope, and not have to worry about the value of this`波动。

-

下面是一个简单的小提琴模仿什么,我认为正在发生的事情: http://jsfiddle.net/jearles/aLFWe/

打开浏览器或Firebug的控制台,并期待在记录对象。 需要注意的是Window是记录的对象时,我只是叫updatea()Object在原来的点击功能,当我叫updateb.apply(this)updatec()其中引用的self )。



文章来源: Pass a function that returns the value of the ko.computed