Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/88.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何从Oracle jet中的下拉列表中唯一标识选定值,该下拉列表位于每个绑定的内部_Javascript_Html_Knockout.js_Oracle Jet - Fatal编程技术网

Javascript 如何从Oracle jet中的下拉列表中唯一标识选定值,该下拉列表位于每个绑定的内部

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

1) 我有三个名字伯特,查尔斯,丹尼斯

  • 其可观察指数(使用当前的可观察指数)
  • 0:Bert,1:Charles,2:Denise
  • 他们的当前状态显示在姓名前面(使用Current.data.Status
2) .每个名称都有下拉和提交按钮。(用于每个名称的oj绑定)

3) .我可以从下拉列表中选择值并提交(它将捕获从下拉列表中选择的值)

行动

  • 初始页面视图

假设我选择了

  • 0:Bert和下拉值为Firefox
  • 1:Charles和下拉值为Safari
  • 2:Denise和下拉值为Opera
  • 然后单击0:Bert中的Submit按钮
问题

  • “提交”按钮捕捉我最后从2:Denise中选择的Opera
期望值

  • 我想通过点击0:Bert提交按钮获得Firefox
我怎样才能做到这一点

代码

dashboard.html

      <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());
                };