【发布时间】:2016-10-26 07:11:29
【问题描述】:
我正在为表单生成器制定“规则”。
我想根据选择的下拉菜单显示/隐藏文本框。
例如,假设我们在“Form Builder”下的“TextField”控件有以下“规则”
Rule# Control(dropdown) Condition(dropdown) Value(as input textbox)
1 TextBox_1 Is filled out (Text Input NOT REQUIRED)
2 TextBox_2 Contains Hi
综上所述,对于规则 1,不需要文本输入,对于规则 2,需要文本输入。
以上是我的场景。
我尝试了什么:
HTML 内容:
//Dropdown for "Condition"
<select
class="form-control"
data-bind="
value: selectedValue
options: ruleConditions().options(),
optionsText: 'Name',
optionsValue: 'Value',
optionsCaption: 'Choose condition'">
</select>
//Input text field for "Value"
<input
type="text"
class="form-control"
data-bind="visible: ruleConditions().selectedValue()" />
KnockoutJS 内容:
我有两个视图模型。
1) FormViewModel
2) TextBoxViewModel
另外,我有一个数组,其中包含options 的下拉菜单。
而我的实现如下:
//Options Available in Array
var RuleConditionArray = {
// Options for "Text Field" under Rules tab
textFieldConditions: ko.observableArray
(
[
{
Name: 'is filled out',
Value: 'isfilledout',
isExpressionValueRequired: false
},
{
Name: 'contains',
Value: 'contains',
isExpressionValueRequired: true
}
]
)
};
//Form View Model
function FormVM() {
var self = this;
self.textBoxVM = ko.observable(new TextBoxViewModel(Id,Name));
}
//TextField View Model
function TextBoxViewModel(Id, Name) {
var Txt = this;
Txt.CommonProperties = new CommonViewModel(Id, Name);
// Initialize Rule Conditions from Array.
Txt.ruleConditions = ko.observable(new RuleConditionViewModel(RuleConditionArray.textFieldConditions()));
Txt.selectedItem = ko.observable();
Txt.selectedValue = ko.computed(function () {
return this.selectedItem() && this.selectedItem().isExpressionValueRequired
}, this);
}
formView = new FormVM();
ko.applyBindings(formView);
我得到了什么:
通过上面的代码,我可以用值填充下拉列表。
我没有得到什么:
我无法show/hideValue“规则”的文本输入字段。我需要获取isExpressionValueRequired 的值并根据该值显示/隐藏“Value”输入文本字段。
我对此感到震惊。请帮我摆脱这个。
编辑 - 1:我的小提琴:
【问题讨论】:
-
您的
<select>元素中是否缺少value: selectedItem数据绑定? -
我试过了。但不起作用。我尝试过来自
StackOverflow和jsFiddle的不同解决方案。例如,我在 jsFiddle link 中尝试了这个解决方案,它最适合我的方法,但不是我的场景.@user3297291 -
能不能加分,让很多用户看到这个问题,快速解决?
-
获得快速答案的最佳方法通常是创建一个 fiddle 或 stack sn-p,其中包含足够的代码来重现您的问题。
-
谢谢。我很快就会创建并让您了解小提琴。
标签: javascript jquery html knockout.js formbuilder