我正在制作"规则"表格制作者。
我想根据所选的下拉列表显示/隐藏文本框。
例如,我们假设我们有以下规则"规则"对于" TextField" " Form Builder"
下的控制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);
我得到了什么:
从上面的代码中,我可以使用值填充下拉列表。
我没得到的东西:
我无法{&#34}规则&#34;的show/hide
Value
文字输入字段。我需要获取isExpressionValueRequired
的值并显示/隐藏&#34; Value
&#34;输入基于此值的文本字段。
我很震惊。请帮我摆脱这个。
编辑 - 1:我的小提琴:
答案 0 :(得分:2)
代码中的问题:
selectedValue
是TextBoxViewModel
中的RuleConditionViewModel
中的属性,visible: ruleConditions().selectedValue()
中的不是。因此,visible: selectedValue
应该只是optionsValue: 'Value'
Value
绑定告诉knockout只存储规则条件的isfilledout
属性。即:它存储字符串contains
或selectedItem
。删除它,整个对象都存储起来。this.selectedItem() && this.selectedItem().isExpressionValueRequired
是一个字符串,因此计算表达式string
始终为false:isExpressionValueRequired
原型没有名为{{1}}的属性。