Knockout.JS: 绑定 select 的变化事件到另一个 UI 属性
Knockout.JS: Bind change event of select to another UI attribute
我想让以下输入仅在选择 database
属性 时可见(在 Bootstrap 更改事件上)。在 Knockout JS 中是否有一个优雅有效的解决方案可以在 HTML 中执行此操作,如果没有,那么 JavaScript 的方法是什么?
<select id="db" class="form-control" data-bind="value: database, valueUpdate: 'change'">
<option disabled selected> -- select an option -- </option>
<option>MySQL database format</option>
<option>PostgreSQL database format</option>
<option>Other format</option>
</select>
<label>Address :</label>
<input type="text" class="form-control" id="address" data-bind="visible: database">
<label>Port :</label>
<input type="text" class="form-control" id="port">
我正在考虑使用 data-bind="visible: typeof database != 'undefined'"
之类的东西,但是尝试访问 database
的此类表达式会抛出 Uncaught ReferenceError: database is not defined
。使用 jQuery 的方法也不起作用。
将您的选项存储在一个数组中,并通过选项绑定将它们绑定到 select 输入。要存储 selected 值,请使用(您现有的)数据库可观察值。基于该可观察对象,您可以在数据库可观察对象具有 selected 选项时显示您的表单字段(如果没有,则隐藏它们)。
另外,使用 optionsCaption 绑定来显示 "please choose" 选项。否则,您需要手动处理过滤掉该虚拟选项的问题。
function viewModel(){
this.databaseOptions = ko.observableArray(["MySQL database format", "PostgreSQL database format", "Other format"]);
this.database = ko.observable();
}
ko.applyBindings(new viewModel());
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>
<select id="db" class="form-control" data-bind="options: databaseOptions, optionsCaption: ' -- select an option -- ', value: database">
</select>
<hr />
<div data-bind="if: database">
<label>Address :</label>
<input type="text" class="form-control" id="address" data-bind="visible: database">
<label>Port :</label>
<input type="text" class="form-control" id="port">
</div>
我想让以下输入仅在选择 database
属性 时可见(在 Bootstrap 更改事件上)。在 Knockout JS 中是否有一个优雅有效的解决方案可以在 HTML 中执行此操作,如果没有,那么 JavaScript 的方法是什么?
<select id="db" class="form-control" data-bind="value: database, valueUpdate: 'change'">
<option disabled selected> -- select an option -- </option>
<option>MySQL database format</option>
<option>PostgreSQL database format</option>
<option>Other format</option>
</select>
<label>Address :</label>
<input type="text" class="form-control" id="address" data-bind="visible: database">
<label>Port :</label>
<input type="text" class="form-control" id="port">
我正在考虑使用 data-bind="visible: typeof database != 'undefined'"
之类的东西,但是尝试访问 database
的此类表达式会抛出 Uncaught ReferenceError: database is not defined
。使用 jQuery 的方法也不起作用。
将您的选项存储在一个数组中,并通过选项绑定将它们绑定到 select 输入。要存储 selected 值,请使用(您现有的)数据库可观察值。基于该可观察对象,您可以在数据库可观察对象具有 selected 选项时显示您的表单字段(如果没有,则隐藏它们)。
另外,使用 optionsCaption 绑定来显示 "please choose" 选项。否则,您需要手动处理过滤掉该虚拟选项的问题。
function viewModel(){
this.databaseOptions = ko.observableArray(["MySQL database format", "PostgreSQL database format", "Other format"]);
this.database = ko.observable();
}
ko.applyBindings(new viewModel());
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>
<select id="db" class="form-control" data-bind="options: databaseOptions, optionsCaption: ' -- select an option -- ', value: database">
</select>
<hr />
<div data-bind="if: database">
<label>Address :</label>
<input type="text" class="form-control" id="address" data-bind="visible: database">
<label>Port :</label>
<input type="text" class="form-control" id="port">
</div>