Javascript 如何在knockoutJs中将依赖选项值放入隐藏的输入字段

Javascript 如何在knockoutJs中将依赖选项值放入隐藏的输入字段,javascript,knockout.js,requirejs,Javascript,Knockout.js,Requirejs,我正在尝试将选定的输入值输入到一个隐藏字段中,到目前为止,任何人都可以在这方面帮助我,因为我正在尝试使用下面的代码 Html 一切正常,但我正在尝试将选定的依赖值放入一个隐藏字段中,但这些值无法渲染 <input id="return_order_dependent" type="hidden" name="return_order_dependent" data-bind='value: selectedPackage().name' /> 问题在于selectedPackage

我正在尝试将选定的输入值输入到一个隐藏字段中,到目前为止,任何人都可以在这方面帮助我,因为我正在尝试使用下面的代码

Html

一切正常,但我正在尝试将选定的依赖值放入一个隐藏字段中,但这些值无法渲染

<input id="return_order_dependent" type="hidden" name="return_order_dependent" data-bind='value: selectedPackage().name' />

问题在于
selectedPackage
可以是
null
未定义
。无论何时发生这种情况,您的
数据绑定都会抛出一个错误:

selectedPackage().name
变为
未定义。name
抛出
无法读取未定义的属性“name”

未定义的
/
值是
选项标题
绑定的结果。如果没有标题,knockout将在应用
select
绑定时将所选值设置为列表中的第一个元素

您需要做两件事:

  • 确定要如何指示未设置的值
  • 确保数据绑定没有中断
  • 就我个人而言,我会在viewmodel中使用计算并管理未设置状态:

    this.hiddenInputValue = ko.pureComputed(() => {
      return (this.selectedPackage() || { name: "NOT_SET" }).name;
    });
    
    使用数据绑定:

    <input type="hidden" data-bind='value: hiddenInputValue' />
    
    其他解决方案方向包括:

    • 删除
      选项caption
      ,默认情况下始终选择第一个值
    • 在隐藏的输入周围放置
      if
      with
      (这可能不适用于与服务器相关的内容)
    <input id="return_order_dependent" type="hidden" name="return_order_dependent" data-bind='value: selectedPackage().name' />
    
    this.hiddenInputValue = ko.pureComputed(() => {
      return (this.selectedPackage() || { name: "NOT_SET" }).name;
    });
    
    <input type="hidden" data-bind='value: hiddenInputValue' />
    
    <input type="hidden" data-bind='value: selectedPackage() ? selectedPackage().name : null' />