如何使用下拉框替换其中一个动态生成的输入字段。 即。我想用下拉列表替换第一个输入字段。
<select><option value='1'>1</option><option = '2'>2</option></select>
这是jsfiddle http://jsfiddle.net/z9tWd/
答案 0 :(得分:0)
您想要使用模板。像
这样的东西<div data-bind="template: { name: template, data: $data }"></div>
还有一些图书馆可以帮助你制作这些整洁的,就像这个(作者) https://github.com/AndersMalmgren/Knockout.BindingConventions
与上面相同的例子看起来像 http://jsfiddle.net/C2Gky/
答案 1 :(得分:0)
您可以使用if
绑定在input
和select
之间进行选择:
<!-- ko if: type() === 'input' -->
<input data-bind="value: name" />
<!-- /ko -->
<!-- ko if: type() === 'select' -->
<select data-bind="options: options,optionsCaption: 'Choose...', value: name">
</select>
<!-- /ko -->
然后您可以像这样更改Item
:
function Item(id, options) {
this.id = ko.observable(id);
this.type = ko.observable(options instanceof Array ? "select" : "input");
this.name = ko.observable(this.type() === 'input' ? options : undefined);
this.options = ko.observableArray(this.type() === 'select' ? options : null);
this.dirtyFlag = new ko.dirtyFlag(this);
}
创建Item
时,如果将其作为第二个参数传递给它,则会自动创建一个下拉列表:
this.items = ko.observableArray([
new Item(1, "one"),
new Item(2, "two"),
new Item(3, "three"),
new Item(4, ["1", "2"])
]);
请注意,您的isDirty
仍有效。