首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将依赖选项值放入knockoutJs中的隐藏输入字段

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

Stack Overflow用户
提问于 2017-04-12 19:11:15
回答 1查看 91关注 0票数 0

我正在尝试将选定的输入值放入隐藏字段,到目前为止,有谁可以帮助我,因为我正在尝试下面的代码。

Html

代码语言:javascript
复制
<select data-bind="options: packages,
                   optionsCaption: 'Select...',
                   optionsText: 'name',
                   value: selectedPackage">                 
</select>
</br>
<!-- ko with : selectedPackage -->
</br>
<select data-bind="options: locationOptions,
                   optionsCaption: 'Select...',
                   optionsText: 'location',
                   value: $parent.selectedLocation">
</select>
<!-- /ko  -->

显示值位于

代码语言:javascript
复制
<span data-bind="with: selectedPackage">
        <b data-bind="text: name"></b> 
            <!-- ko with : $parent.selectedLocation -->
                > <b data-bind="text: location"></b>
            <!-- /ko  -->
    </span>
            </td>
            <td>
                <span data-bind="with: selectedPackage">
                <b data-bind="text: price"></b> $ +  
            <!-- ko with : $parent.selectedLocation -->
                $<b data-bind="text: price"></b>
            <!-- /ko  -->
    </span>

Js/Knockout代码

代码语言:javascript
复制
    this.packages = [
    {
        sku : "306",
        name: "Standard delivery hours (8-4)",
        description: "its nice",
        price: 99,
        locationOptions : []
    },
    {
        sku : "100",
        name: "Within a 4 hour window (adds $15)",
        description: "its nice",
        price: 100,
        locationOptions : [
            { location: "6:00 AM - 10:00 AM (off hours)", price: 15},
            { location: "6:30 AM - 10:30 AM (off hours)", price: 15},
            { location: "7:00 AM - 11:00 AM (off hours)", price: 15}
        ]
    },
    {
        sku : "101",
        name: "Within a 2 hour window (adds $25)",
        description: "its cool",
        price: 100,
        locationOptions : [
            { location: "8:00 AM - 10:00 AM", price: 25},
            { location: "10:00 AM - 12:00 PM", price: 25},
            { location: "12:00 AM - 02:00 PM", price: 25}
        ]
    },
    {
        sku : "102",
        name: "Within a 1 hour window (adds $40)",
        description: "its cool",
        price: 100,
        locationOptions : [
            { location: " 8:00 AM - 9:00 PM", price: 40},
            { location: "9:30 AM - 10:00 PM", price: 40},
            { location: "10:00 AM - 11:00 PM", price: 40}
        ]
    }
];


    this.selectedPackage = ko.observable();

一切运行正常,但我试图将选定的依赖值放入隐藏字段中,但值不会呈现。

代码语言:javascript
复制
<input id="return_order_dependent" type="hidden" name="return_order_dependent" data-bind='value: selectedPackage().name' />
EN

回答 1

Stack Overflow用户

发布于 2017-04-12 20:49:41

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

抛出Cannot read property 'name' of undefinedselectedPackage().name变成undefined.name

undefined/null值是optionsCaption绑定的结果。如果没有标题,knockout会在应用select绑定时将您选择的值设置为列表中的第一个元素。

你需要做两件事:

  1. 确定如何指示未设置的值
  2. 确保数据绑定不会中断。

就我个人而言,我会在视图模型中使用计算并管理未设置的状态:

代码语言:javascript
复制
this.hiddenInputValue = ko.pureComputed(() => {
  return (this.selectedPackage() || { name: "NOT_SET" }).name;
});

使用数据绑定:

代码语言:javascript
复制
<input type="hidden" data-bind='value: hiddenInputValue' />

您还可以将此逻辑放入数据绑定本身(本例默认为null)

代码语言:javascript
复制
<input type="hidden" data-bind='value: selectedPackage() ? selectedPackage().name : null' />

其他解决方案方向包括:

删除optionsCaption,始终通过在隐藏输入周围选择ifwith来选择第一个值(这可能不适用于与服务器相关的内容)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43367928

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档