繁体   English   中英

更新Knockout中的可见绑定?

[英]Update the visible binding made in Knockout?

我刚刚开始学习淘汰赛,并且有一个有趣的场景。

我有一个三个步骤的“向导”。 根据在步骤1和步骤2中所做的选择,不同的内容应在步骤3中显示。

我在淘汰赛中做了一个功能:

self.canSendLetter = ko.computed(function () {
    console.log('Inside canSendLetter');
    if (self.priceStatus == "success") {
        return true;
    }
    return false;
});

在前端,我尝试了以下两种数据绑定:

<input id="btnsubmit" type="submit" class="btn btn-primary btn-lg submitAbe" value="@ViewRes.StampAndSendLetter &raquo;" data-bind="visible: canSendLetter(), click: save" />

加载页面时,我看到正在记录“内部candsendletter”。 但是,当我转到向导中的第3步时,需要此“可见绑定”进行更新。

目前,我在goToStepThree中具有以下代码:

 self.goToStepThree = function () {
        if (self.uploadPdf() == 1 && self.uploadFileKey() == '') {
            self.showMissingUpload(true);
            return false;
        } else if (self.writeContentEditor.getData() == '') {
            self.showMissingWriteContent(true);
            return false;
        }

        var thiz = self;
        var writtenContent = encodeURIComponent(self.htmlEncode(self.writeContentEditor.getData()));
        $.ajax({
            url: self.getPriceUrl,
            type: 'POST',
            data: {
                usePdf: self.uploadPdf() == 1 ? 'true' : 'false',
                uploadFileKey: self.uploadFileKey(),
                content: writtenContent,
                address: self.address(),
                postal: self.postal(),
                city: self.city(),
                country: self.country()
            },
            dataType: 'json',
            success: function (data) {
                thiz.priceStatus = data.status;
                thiz.priceStatusMessage = data.message;
                thiz.cost(data.price);
                thiz.numberOfPages(data.numberOfPages);
                if (data.isAuthenticated) {
                    self.isAuthenticated(true);
                    self.isValidCredits(data.isValidCredits);
                    self.paymentMethod('Credits (' + data.credits + '$ left)');
                }

                thiz.currentStep(3);

            }
        });
    };

所以我的问题是:

当我转到第三步时,如何确定我的btnsubmit按钮正在调用canSendLetter函数?

编辑

我的视图模型:

我在这里将priceStatus和priceStatusMessage定义为可观察对象:

 self.priceStatus = ko.observable('');
    self.priceStatusMessage = ko.observable('');

您的priceStatus字段确实是observable ,但必须适当使用:

比较它的值(获取器)时:

self.canSendLetter = ko.computed(function () {
    console.log('Inside canSendLetter');
    return self.priceStatus() === "success";
});

设置时,它的价值(设置者):

success: function (data) {
         thiz.priceStatus(data.status);
         thiz.priceStatusMessage(data.message);
         ...
         }

当ViewModel上的某些数据发生更改时,淘汰赛无法获得通知,唯一的方法是通过observable “通知订阅者”的observable机制(例如canSendLetter计算canSendLetter )。

请参阅文档

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM