knockout.js KnockoutJS:选择对象作为返回值

jvidinwx  于 2022-11-10  发布在  其他
关注(0)|答案(1)|浏览(152)

我正在尝试将现有模板从按钮单击转换为带选项的选择。原始模板如下所示:

<!-- ko foreach: {data: amounts, as: 'amount'} -->
<button type="button" data-bind="click: $parent.changeAmount.bind($parent)">
    <span data-bind="text: amount.amountFormatted"></span>
</button>
<!-- /ko -->

数组amounts的内容如下:

[

    {
        "baseValue":"15",
        "value":15,
        "amountFormatted":"15,00 €",
        "price":"15,00 €"
    },
    {
        "baseValue":"25",
        "value":25,
        "amountFormatted":"25,00 €",
        "price":"25,00 €"
    },
    {
        "baseValue":"50",
        "value":50,
        "amountFormatted":"50,00 €",
        "price":"50,00 €"
    }
]

下面是处理函数:

changeAmount: function (amount) {
    console.log(amount);
    this.activeAmount(amount);
}

console.log向我展示了按钮单击的返回值是什么样子的:

{
    "baseValue":"50",
    "value":50,
    "amountFormatted":"50,00 €",
    "price":"50,00 €"
}

现在,我希望将整个内容显示为选择而不是按钮:

<select data-bind="options: amounts,
   optionsText: 'amountFormatted',
   optionsValue: 'value',
   value: activeAmount,
   event:{ change: changeAmount}"></select>

但是在这个模板中,select返回整个视图对象,而不是单击按钮返回的对象。我如何才能让select返回相同的对象/数组呢?

raogr8fs

raogr8fs1#

您应该只需要将其作为最小工作示例:
1.可观测量带有选项的数组
1.装订如下图:

<select data-bind="options: amounts,
   optionsText: 'amountFormatted',
   value: activeAmount"></select>

您还使用了事件绑定,这在您的上下文中可能根本不需要,您将其绑定到父对象,但您不使用this,而是还期望传入数量,这与您的单击处理程序定义(您绑定函数的地方,可以,但如果您使用该路径,则不会给出参数)配合得很好。
重新处理上下文和单击处理程序,使其访问activeAmount,这样您就不需要参数。由于您绑定在父级上,因此只需在内部使用此.activeAmount。
注意:如果select bind工作正常,则不需要执行任何操作来更新activeAmount。它将已经包含所选选项的formattedAmount文本

相关问题