Javascript 淘汰赛js+;在我设置后,你正在重置我的可观察值

Javascript 淘汰赛js+;在我设置后,你正在重置我的可观察值,javascript,knockout.js,jquery-chosen,Javascript,Knockout.js,Jquery Chosen,所以我正在构建这个图表构建ui。您可以从数据库中选择字段来构建图形。这些图有一个刷新间隔下拉列表 在我尝试从保存的“视图”加载值之前,所有操作都很正常 当我向RefreshInterval变量添加subscribe时,可以看到该值被设置 但它立即被重置为我的选项数组的0'd索引 [html] <div class="wrapper wrapper-content" id="charts"> <select id="interval" data-bind="options:

所以我正在构建这个图表构建ui。您可以从数据库中选择字段来构建图形。这些图有一个刷新间隔下拉列表

在我尝试从保存的“视图”加载值之前,所有操作都很正常 当我向RefreshInterval变量添加subscribe时,可以看到该值被设置

但它立即被重置为我的选项数组的0'd索引

[html]

<div class="wrapper wrapper-content" id="charts">
  <select id="interval" data-bind="options: RefreshIntervals,
    optionsText: 'Value',
    value: RefreshInterval,
    chosen: {
      disable_search_threshold: 0,
      width:'175px',
      no_results_text: 'No results!',
      placeholder_text_single: 'Select an interval',
      search_contains: true,
    }">
  </select>
</div>
我这里有一把小提琴:

我有3个下拉框需要填充。 我希望值是实际的元素,而不是一个值字段,因为选项列表可能会更改,所以我需要将它与选项列表中的实际对象关联起来


你知道我如何解决这个问题吗?

没有正确生成
上的value属性,你知道吗 需要将
选项Value:“Value”
添加到绑定中

基本上,敲除有一个限制,即不能将选定值绑定到包装对象

由于此限制,以编程方式设置所需选项的唯一方法是:

vm.RefreshInterval("10 seconds");
计算出的值当然会返回字符串值,而不是整个对象。 然后,您可以简单地执行此操作以获取对象。(或者使用下划线或lodash使代码看起来更优雅)

this.RefreshInterval.subscribe(函数(newValue)){
var obj=null;

对于(var i=0;iI)我试图将其设置为10秒。作为小提琴的底线。对我来说似乎没有发生。它永远不会发生。如果我将其设置为“10秒”,它会正确地显示在选择中,但可观察到的不是它需要的元素,而是一个字符串。啊,我明白了,很抱歉,错过了,更新了答案和小提琴。
vm.RefreshInterval("10 seconds");
this.RefreshInterval.subscribe(function(newValue){
 var obj = null;
 for(var i=0; i<self.RefreshIntervals().length; i++) {
   var interval = self.RefreshIntervals()[i];
   if(interval.Value === newValue) {
     obj = interval;
     break;
   }
 }
 console.log(obj);
);