Javascript 如何从Oracle jet中的下拉列表中唯一标识选定值,该下拉列表位于每个绑定的内部
1) 我有三个名字伯特,查尔斯,丹尼斯Javascript 如何从Oracle jet中的下拉列表中唯一标识选定值,该下拉列表位于每个绑定的内部,javascript,html,knockout.js,oracle-jet,Javascript,Html,Knockout.js,Oracle Jet,1) 我有三个名字伯特,查尔斯,丹尼斯 其可观察指数(使用当前的可观察指数) 0:Bert,1:Charles,2:Denise 他们的当前状态显示在姓名前面(使用Current.data.Status) 2) .每个名称都有下拉和提交按钮。(用于每个名称的oj绑定) 3) .我可以从下拉列表中选择值并提交(它将捕获从下拉列表中选择的值) 行动 初始页面视图 假设我选择了 0:Bert和下拉值为Firefox 1:Charles和下拉值为Safari 2:Denise和下拉值为Ope
- 其可观察指数(使用当前的可观察指数)
- 0:Bert,1:Charles,2:Denise
- 他们的当前状态显示在姓名前面(使用Current.data.Status)
- 初始页面视图
- 0:Bert和下拉值为Firefox
- 1:Charles和下拉值为Safari
- 2:Denise和下拉值为Opera
- 然后单击0:Bert中的Submit按钮
- “提交”按钮捕捉我最后从2:Denise中选择的Opera
- 我想通过点击0:Bert提交按钮获得Firefox
<div>
<oj-bind-for-each data="[[dataProvider]]">
<template>
<li>
<oj-bind-text value="[[$current.data.status]]"></oj-bind-text>
<oj-bind-text value="[[$current.observableIndex]]"></oj-bind-text> : <oj-bind-text value="[[$current.data.name]]"></oj-bind-text>
<oj-button class='oj-button-sm' on-oj-action= "[[saveData]]">
Submit
</oj-button>
<oj-select-one id="[[uniquieId]]"
on-value-changed="[[selectedValue]]" options="[[browsers]]"
value="{{$current.data.status}}" style="max-width:20em">
</oj-select-one>
</li>
</template>
</oj-bind-for-each>
</div>
需要进行两个修复:
oj中选择一个
组件,将所选值绑定到“{{{$current.data.status}”
。但要使其正常工作,$current.data.status
必须能够更新其值,然后反映最新值。当您将“状态”设置为简单字符串时,这是不可能的var users = ko.observableArray([
{id: "1", name: "Bert", status: ko.observable("Internet Explorer")},
{id: "2", name: "Charles", status: ko.observable("Chrome")}),
{id: "3", name: "Denise", status: ko.observable("Safari")}
]);
换句话说,必须通过用户交互更新的视图和视图模型之间的任何绑定值都应该是可观察的
selectedValue
函数只是将selected
更新为上次选择的内容,因此无法使用selected
observable。相反,您可以使用另一个变量uniquieId
来获取正确的数据,因为saveData
函数使用您刚才单击提交的行的索引更新uniquieId
saveData
函数更改为:
self.saveData = function (event, current) {
self.uniquieId(current.observableIndex());
console.log(self.uniquieId());
console.log(users()[self.uniquieId()].status());
};
如果这个答案已经解决了你的问题,请考虑通过点击复选标记并进行投票来接受它。这向更广泛的社区表明,你已经找到了一个解决方案,并使回答者和你自己都获得了一定的声誉。我很感谢你的回答,它解决了问题。我很高兴它有帮助……)
self.saveData = function (event, current) {
self.uniquieId(current.observableIndex());
console.log(self.uniquieId());
console.log(users()[self.uniquieId()].status());
};