将所选值与DevExtreme和KnockOut绑定时出错

时间:2016-02-29 13:29:50

标签: javascript mobile knockout.js devexpress devextreme

我正在尝试开发一个小应用程序。

我已经创建了一个登录视图并且它可以工作,我能够绑定用户编写的数据。在此之后,我显示两个选择框。第一个与列表绑定(正确),第二个必须与从第一个中选择值后填充的列表绑定。

我无法读取从第一个列表中选择的值。

我有这个HTML:

<div class="dx-fieldset">
            <div class="dx-field">
                <div class="dx-field-label">Rete</div>
                <div class="dx-field-value"
                     data-bind="dxLookup: { dataSource: is_retistiSource, value: rete, displayExpr: 'NOME', title: 'Retisti associati', placeholder: 'Selezionare rete',
                                            onSelectionChanged:setRete }" />
            </div>

            <div class="dx-field">
                <div class="dx-field-label">Impianto</div>
                <div class="dx-field-value" 
                     data-bind="dxLookup: { dataSource: is_impiantiSource, value: impianto, displayExpr: 'NOME', title: 'Impianti associati', placeholder: 'Selezionare impianto' }" />
            </div>
        </div>

和这个javascript:

OverviewAPP.afterLogin = function (params) {
    var isReady = $.Deferred();
    var viewModel = {
        rete: ko.observable(""),
        impianto: ko.observable(""),
        is_retistiSource: OverviewAPP.listaReti,
        is_impiantiSource: OverviewAPP.listaImpianti,
        setRete: function () {
            console.log(viewModel.rete);
            var nRetisti = OverviewAPP.listaRetiImpianti.length;
            for (i = 0; i < nRetisti; i++) {
                if (OverviewAPP.listaRetiImpianti[i]["retista"]["NOME"] == this.rete)
                {
                    OverviewAPP.listaImpianti = listaRetiImpianti[i]["listaImpianti"];
                    break;
                }
            }
            is_impiantiSource = OverviewAPP.listaImpianti;
        },
        close: function () {
            OverviewAPP.app.back();
        }
    };
    return viewModel;
};

在setRete函数中,使用“console.log(viewModel.rete);”行,我看到了这个输出:

d(){if(0<arguments.length)return d.Wa(c,arguments[0])&&(d.X(),c=arguments[0],d.W()),this;a.k.Ob(d);return c}

为什么呢?如何绑定和读取所选值?

更新:我已经这样做了,它有效:

setRete: function (e) {
            OverviewAPP.IDrete = e.value;
            var nRetisti = OverviewAPP.listaRetiImpianti.length;
            for (i = 0; i < nRetisti; i++) {
                if (OverviewAPP.listaRetiImpianti[i]["retista"]["NOME"] == e.value["NOME"])
                {
                   OverviewAPP.listaImpianti = OverviewAPP.listaRetiImpianti[i]["listaImpianti"];
                    break;
                }
            }
            //ko.applyBindings(viewModel);
        },

但我不知道如何更新我的第二个清单,“is_impiantiSource”。

1 个答案:

答案 0 :(得分:1)

Observables是函数。这就是你在控制台中获得功能的原因。调用rete函数以获取其值:

viewmodel.rete();

另请参阅描述此内容的Knockout: Observables帮助主题(在&#34;阅读和编写observables&#34;)。

这是获取新值的方法。然后,您需要更新从属查找数据源。为此,将 is_impiantiSource 属性设为可观察数组:

is_impiantiSource: ko.observableArray(OverviewAPP.listaImpianti),

在此之后,在setRene中修改它,如:

viewModel.is_impiantiSource(OverviewAPP.listaImpianti)

另请参阅Observable Arrays了解如何在Knockout中使用数组