将所选值与 DevExtreme 和 KnockOut 绑定时出错
Error while binding the selected value with DevExtreme and KnockOut
我正在尝试开发一个小应用程序。
我做了一个登录视图并且可以使用,我可以绑定用户写入的数据。在此之后,我显示两个 select 框。第一个与列表绑定(正确),第二个必须与在第一个值 selected 后填充的列表绑定。
我无法从第一个列表中读取 selected 的值。
我有这个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}
为什么?如何绑定和读取 selected 值?
更新:我已经这样做了,有效:
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"。
Observable 是函数。这就是您在控制台中获得功能的原因。调用rete函数获取其值:
viewmodel.rete();
另请参阅描述此内容的 Knockout: Observables 帮助主题(在 "Reading and writing observables" 下)。
这是获取新值的方法。然后,您需要更新依赖查找数据源。为此,使 is_impiantiSource 属性 成为可观察数组:
is_impiantiSource: ko.observableArray(OverviewAPP.listaImpianti),
之后在setRene中修改为:
viewModel.is_impiantiSource(OverviewAPP.listaImpianti)
另请参阅 Observable Arrays 了解如何在 Knockout 中使用数组
我正在尝试开发一个小应用程序。
我做了一个登录视图并且可以使用,我可以绑定用户写入的数据。在此之后,我显示两个 select 框。第一个与列表绑定(正确),第二个必须与在第一个值 selected 后填充的列表绑定。
我无法从第一个列表中读取 selected 的值。
我有这个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}
为什么?如何绑定和读取 selected 值?
更新:我已经这样做了,有效:
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"。
Observable 是函数。这就是您在控制台中获得功能的原因。调用rete函数获取其值:
viewmodel.rete();
另请参阅描述此内容的 Knockout: Observables 帮助主题(在 "Reading and writing observables" 下)。
这是获取新值的方法。然后,您需要更新依赖查找数据源。为此,使 is_impiantiSource 属性 成为可观察数组:
is_impiantiSource: ko.observableArray(OverviewAPP.listaImpianti),
之后在setRene中修改为:
viewModel.is_impiantiSource(OverviewAPP.listaImpianti)
另请参阅 Observable Arrays 了解如何在 Knockout 中使用数组