Knockout.js 淘汰:更改事件不起作用

Knockout.js 淘汰:更改事件不起作用,knockout.js,Knockout.js,在我的网页上,我有以下两个输入,第一个是由自动完成填充的文本框,第二个是普通文本框 <td style="width: 380px"> <input type="text" data-bind="enable: enableContract, jqAuto: { source: getOptions,

在我的网页上,我有以下两个输入,第一个是由自动完成填充的文本框,第二个是普通文本框

       <td style="width: 380px">
                <input type="text"
                       data-bind="enable: enableContract, jqAuto: {
                            source: getOptions,
                            value: SelectedContract,
                            labelProp: 'Label',
                            inputProp: JobDescription
                            }"
                       style="width: 99%;" />
            </td>
            <td style="width: 160px">
                <input type="text"
                       data-bind="value: Description, enable: enableContract, event: {change: disableContractIfConditionsMet}"
                       style="width: 99%;" />
            </td>
自动完成文本框本身的值设置如下:

self.SelectedContract = ko.observable(self.JobDescription());
不起作用的是第二个文本框上的更改事件。其目的是,例如,当您输入文本Sick时,它将禁用并清除上一个文本框,并将收缩设置为零,将JobName设置为空-尚未编码。但当我离开描述文本框时,不会执行此事件。 如何使其工作?

我建议不要使用change事件,而是订阅值绑定observable

var disableContractIfConditionsMet = function(currentDescription) {
  // Perform condition logic and set enable/disable states here
};

this.Description = ko.observable();
this.Description.subscribe(disableContractIfConditionsMet);
您甚至可以创建一个启用/禁用的计算方法,该方法根据Description的值自动更新。虽然我不太了解用户界面的具体要求,所以我很难写这些

您将如何使用计算结果的示例:

ko.applyBindingsnew函数{ 所需var_值=测试; this.secondInputValue=ko.observable; this.firstInputEnabled=ko.computedfunction{ 返回此.secondInputValue .toLowerCase .包括所需的_值; }这,; }; 输入{ 显示:块; 边缘底部:1rem; } 输入:禁用{ 背景:rgba0,0,0,0.2; } 如果键入包含测试的内容,则此输入将启用第一个输入 我建议不要使用change事件,而是订阅值绑定的observable

var disableContractIfConditionsMet = function(currentDescription) {
  // Perform condition logic and set enable/disable states here
};

this.Description = ko.observable();
this.Description.subscribe(disableContractIfConditionsMet);
您甚至可以创建一个启用/禁用的计算方法,该方法根据Description的值自动更新。虽然我不太了解用户界面的具体要求,所以我很难写这些

您将如何使用计算结果的示例:

ko.applyBindingsnew函数{ 所需var_值=测试; this.secondInputValue=ko.observable; this.firstInputEnabled=ko.computedfunction{ 返回此.secondInputValue .toLowerCase .包括所需的_值; }这,; }; 输入{ 显示:块; 边缘底部:1rem; } 输入:禁用{ 背景:rgba0,0,0,0.2; } 如果键入包含测试的内容,则此输入将启用第一个输入
很难说您的代码为什么不工作,但这里有一个片段,它使用更改事件来执行您描述的操作,至少可以禁用。我不理解jqAuto绑定,所以我不知道如何清除该值

自我={ 选定合同:可观察到, 职位描述:可观察, 启用合同:ko.observetrue, 描述:ko.可观察的“描述”, DisableCompressionConditionSmet:=>{ 如果self.Description===“生病”{ self.enableContractfalse } } }; self.construcd=ko.pureComputedfunction{ 如果self.SelectedContract!=空{ 返回self.SelectedContract.Id; } 返回0; }; self.JobName=ko.pureComputedfunction{ 如果self.SelectedContract!=空{ 返回self.SelectedContract.JobName; } 回来 }; ko.applyBindingsself;
很难说您的代码为什么不工作,但这里有一个片段,它使用更改事件来执行您描述的操作,至少可以禁用。我不理解jqAuto绑定,所以我不知道如何清除该值

自我={ 选定合同:可观察到, 职位描述:可观察, 启用合同:ko.observetrue, 描述:ko.可观察的“描述”, DisableCompressionConditionSmet:=>{ 如果self.Description===“生病”{ self.enableContractfalse } } }; self.construcd=ko.pureComputedfunction{ 如果self.SelectedContract!=空{ 返回self.SelectedContract.Id; } 返回0; }; self.JobName=ko.pureComputedfunction{ 如果self.SelectedContract!=空{ 返回self.SelectedContract.JobName; } 回来 }; ko.applyBindingsself;
我将数据绑定更改为enable:disablecontractfconditionsmet,并运行按预期执行的代码,但UI没有更改。顺便说一句,我尝试使用computed,但没有成功。我发现很少有关于淘汰订阅的文档。如果你想让UI自动更新,你必须在enable数据绑定中使用ko.observable或ko.computed。我在回答中包含的示例期望self.enabled=ko.observable,它可以在disablecontractionsMet内设置为true或false。例如:self.enabledcurrentDescription==我已经包括了一个计算启用方法的示例。如果您需要帮助为您的具体案例精心编制代码,那么如果您显示更多的viewmodel(例如DisableContractConditionSet和EnableContracts)将有所帮助谢谢您的帮助,计算出的解决方案很有效。这让我惊讶,因为我想我以前试过,但我一定是出了什么问题。无论如何,非常感谢!我将数据绑定更改为enable:disablecontractfconditionsmet,并运行按预期执行的代码,但UI没有更改。顺便说一句,我试着用comp
但这并没有起作用。我发现很少有关于淘汰订阅的文档。如果你想让UI自动更新,你必须在enable数据绑定中使用ko.observable或ko.computed。我在回答中包含的示例期望self.enabled=ko.observable,它可以在disablecontractionsMet内设置为true或false。例如:self.enabledcurrentDescription==我已经包括了一个计算启用方法的示例。如果您需要帮助为您的具体案例精心编制代码,那么如果您显示更多的viewmodel(例如DisableContractConditionSet和EnableContracts)将有所帮助谢谢您的帮助,计算出的解决方案很有效。这让我惊讶,因为我想我以前试过,但我一定是出了什么问题。无论如何,非常感谢!jqAuto来自淘汰赛jqAutocomplete插件。jqAuto来自淘汰赛jqAutocomplete插件。