How to uniquely identify the selected value from drop down in Oracle jet which is inside for each bind
1)。我有三个名字Bert,Charles,Denise。
- 以及它们的可观察索引(使用current.observableIndex)。
- 0:伯特,1:查尔斯,2:丹妮丝
- 其当前状态显示在其名称的前面(使用current.data.status)
2)。每个名称都有一个下拉菜单并提交按钮。(用于每一个的oj-bind-for-each)
3)。我可以从下拉列表中选择值并提交(它将从下拉列表中捕获所选值)
动作
-
初始页面浏览量
假设我选择了
- 0:Bert和下拉值为Firefox
- 1:Charles和下拉值作为Safari
- 2:Opera的Denise和下拉值
- 然后,我单击来自0:Bert的Submit按钮。
问题
- 提交按钮吸引了我从2:Denise中最后选择的歌剧
期望
- 我想获取0:Bert提交按钮的Firefox单击。
我该如何实现?
代码
dashboard.html
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | <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> |
dashboard.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | define(['accUtils', 'knockout', 'ojs/ojarraydataprovider', 'ojs/ojknockout', 'ojs/ojbutton', 'ojs/ojselectcombobox'], function (accUtils, ko, ArrayDataProvider) { function DashboardViewModel() { var self = this; self.uniquieId = ko.observable(); var users = ko.observableArray([ {id:"1", name:"Bert", status:"Internet Explorer"}, {id:"2", name:"Charles", status:"Chrome"}, {id:"3", name:"Denise", status:"Safari"} ]); self.dataProvider = new ArrayDataProvider(users, {keyAttributes: 'id'}); self.selectVal = ko.observable('Chrome'); self.selected = ko.observable(); self.browsers = ko.observableArray([ {value: 'Internet Explorer', label: 'Internet Explorer'}, {value: 'Firefox', label: 'Firefox'}, {value: 'Chrome', label: 'Chrome'}, {value: 'Opera', label: 'Opera'}, {value: 'Safari', label: 'Safari'} ]); self.selectedValue = function (event, current) { var optionValue = event.detail; self.selected(optionValue.value); console.log(self.selected()); console.log(optionValue); }; self.saveData = function (event, current) { self.uniquieId(current.observableIndex()); console.log(self.uniquieId()); console.log(self.selected()); }; } return DashboardViewModel; } ); |
有2个要修复的问题:
相反,它们应该是可观察的:
1 2 3 4 5 | 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")} ]); |
换句话说,必须通过用户交互更新的View和Viewmodel之间绑定的任何值都应该是可观察的。
因此将您的
1 2 3 4 5 | self.saveData = function (event, current) { self.uniquieId(current.observableIndex()); console.log(self.uniquieId()); console.log(users()[self.uniquieId()].status()); }; |