javascript - 在 Knockout 中设置动态填充选择的值

标签 javascript knockout.js

所以我使用 KnockoutJS 来填充 <select>使用选项并获取选择的值。

<select data-bind="enable: cols1().length > 0, options: cols1(), optionsText: 'name', value: jCol1" id="col1"></select>

变量cols1保存具有简单格式 { name: "name" } 的对象只是因为它需要成为我在页面上执行的其他一些操作的对象。有没有办法从该元素的数据绑定(bind)外部设置选择的值?

最佳答案

绑定(bind)的value部分表示:

将对 jCol1cols1 中的项目的引用存储在 jCol1

如果您想从 UI 外部更改选择,则必须将 jCol1 设置为 cols1 数组中的值。如果您尝试将其设置为其他值,knockout 会立即将其重置为第一个值。切换下面示例中注释的代码行以查看是否发生这种情况:

var ViewModel = function() {
  this.options = ko.observableArray([
    { name: "Item 1" },
    { name: "Item 2" },
    { name: "Item 3" }
  ]);
  
  this.selection = ko.observable();
  this.selection.subscribe(function(newValue) { 
    console.log(newValue) 
  });
  
  this.changeSelectionFromOutside = function() {
    // This does not work because knockout does not do a 
    // deep comparison of objects
    // this.selection({ name: "Item 3" });  
    
    // This _does_ work, because it references one of the
    // options objects
    this.selection(this.options()[2]);
  }.bind(this);
};

ko.applyBindings(new ViewModel());
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>


<select data-bind="options: options, value: selection, optionsText: 'name'"></select>

<button data-bind="click: changeSelectionFromOutside">
  Set option 3
</button>

现在,您还可以选择仅存储您选择的字符串 ID(或其他基元)。这使得从外部设置事物变得更容易,因为您只需要 ID 而不是对实际项目的引用:

var ViewModel = function() {
  this.options = ko.observableArray([
    { name: "Item 1" },
    { name: "Item 2" },
    { name: "Item 3" }
  ]);
  
  this.selection = ko.observable();
  this.selection.subscribe(function(newValue) { 
    console.log(newValue) 
  });
  
  this.changeSelectionFromOutside = function() {
    this.selection("Item 3");
  }.bind(this);
};

ko.applyBindings(new ViewModel());
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>

<select data-bind="options: options, value: selection, optionsText: 'name', optionsValue: 'name'"></select>

<button data-bind="click: changeSelectionFromOutside">
  Set option 3
</button>

关于javascript - 在 Knockout 中设置动态填充选择的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38791407/

相关文章:

javascript - 带有图像的样式 knockout.js 单选按钮

jquery - ko.applyBindings 导致进度条卡住

javascript - 导入 Vue 组件

javascript - 启用 redux-form 并将焦点设置为 field

javascript - 根据选择显示不同的表单域

knockout.js - 以所见即所得的方式 knockout 自定义绑定(bind)重置光标

javascript - 可观察量的值相互依赖 - 循环引用

javascript - 搜索 div 是否包含类(vanilla js)

java - 将数据写入 csv 文件

javascript - 自定义字体未加载 ionic