Knockout订阅多选下拉列表

时间:2016-02-26 15:43:05

标签: javascript jquery knockout.js data-binding

在采购订单中,我想根据价格和税金计算所有订单项的总金额。对于每个项目,有多种税。我正在使用敲除绑定。一切都有效,除了税收部分。当我添加新税或删除时,它不会更新总额。我尝试使用自定义绑定(更新),这对我来说似乎不起作用。

https://jsfiddle.net/krishnasarma/r0doakyk/

HTML:

from unittest.mock import patch, mock_open
import ftplib


def func(hostname, username, password):
    ftp = ftplib.FTP(hostname, username, password)
    ftp.retrbinary('RETR README', open('README', 'wb').write)


@patch('ftplib.FTP')
def test_func_happy_path(MockFTP):
    mock_ftp = MockFTP.return_value  # returns another `MagicMock`
    with patch('__main__.open', mock_open(), create=True) as m:
        func('localhost', 'fred', 's3Kr3t')

    assert mock_ftp.retrbinary.called
    m.assert_called_once_with('README', 'wb')


test_func_happy_path()

JS:

<table>
<tbody data-bind='foreach: Entries'>
<tr>
  <td>
  <input type="text" data-bind="value:Amount" />
  </td>
  <td>
    <select multiple data-bind="ddl1: null, SelectedOptions:Taxes"/>
  </td>
</tr>                          
</tbody>
</table>
<input type="text" data-bind="value:$root.Total()" />

1 个答案:

答案 0 :(得分:0)

代码中有几个问题:

您不需要多选税的自定义绑定。在HTML中,尝试:

resources

然后在JavaScript中:

<select multiple data-bind="options: $root.TaxOptions, optionsText: function(item) { return item.display; }, selectedOptions: Taxes"/>

(请参阅下面的jsfiddle链接获取完整代码)

将Total设置为ko.computed observable,因为它依赖于Entries可观察数组。

self.TaxOptions = [{display: "My Tax 1", value: 1}, {display: "My Tax 2", value: 2}];

请注意,在上面的代码中,获取Taxes的值时,请使用括号(),因为它是一个可观察的数组。

这个jsFiddle应该让你走在正确的轨道上:

https://jsfiddle.net/ombk322j/