KnockoutJS:参数化数据绑定

时间:2019-10-31 15:14:10

标签: javascript user-interface knockout.js frontend

我想对输入元素上的数据绑定使用变量。这是我尝试过的:

<!--  ko foreach: [
    {dataBind: {value: thing1}, txt: 'thing Name:'},
    {dataBind: {maskedThing: thing2}, txt: 'thing Amount:'},
    {dataBind: {value: thing3}, txt: 'thing3 Name:'}
] -->
<div class="row">
    <div class="col-sm-12">
        <div class="form-group">
            <label class="control-label pull-left"><span data-bind="text: txt"></span></label>
            <input type="text" class="form-control" data-bind="$data.dataBind">
        </div>
    </div>
</div>
<!-- /ko -->

txt:变量起作用:它用作标签。但是,“ $ data.dataBind”用法永远不会得到评估,它只是作为字符串保留。如何以这种方式获取输入元素的数据绑定参数化?谢谢。

1 个答案:

答案 0 :(得分:0)

根据我的经验,我认为这是您无法实现的方式。 要正确执行此操作,您可以创建一个自定义组件,以便可以根据传递的对象/参数来控制发生的事情

现在,要使其以最快的速度运行,您可以更改html并添加if绑定以控制呈现的内容以及对象上的标志,如下所示:

....
    {dataBind: {value: thing1}, txt: 'thing Name:', isMasked: false},
    {dataBind: {maskedThing: thing2}, txt: 'thing Amount:', isMasked: true},
    {dataBind: {value: thing3}, txt: 'thing3 Name:', isMasked: false}
....           
    <input type="text" class="form-control" data-bind="if: isMasked, maskedThing: txt">
    <input type="text" class="form-control" data-bind="ifnot: isMasked, value: txt">

在每次迭代中,根据对象的标志,任一输入都将被渲染并绑定。