显示/隐藏基于下拉选择在knockoutJS与模型内部的另一个模型
Show/Hide based on Dropdown selection in knockoutJS with model inside another model
我正在为表单生成器"规则"工作。
我想显示/隐藏文本框基于下拉选择。
例如,让我们假设我们有以下"规则"用于"表单生成器"
下的"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/hide
Value
文本输入字段为"规则"。我需要得到isExpressionValueRequired
的值和显示/隐藏"Value
"输入文本字段基于这个值。
我对此感到震惊。请帮我把这个弄掉。
Edit - 1: My Fiddle:
https://jsfiddle.net/vikash208/z4x5meua/3/代码中的问题:
- 可见绑定:
selectedValue
是TextBoxViewModel
中的属性,不是RuleConditionViewModel
中的。因此,visible: ruleConditions().selectedValue()
只能是visible: selectedValue
- 因为
selectedItem
是一个字符串,计算表达式this.selectedItem() && this.selectedItem().isExpressionValueRequired
总是false:string
原型没有一个名为isExpressionValueRequired
的属性。
optionsValue: 'Value'
绑定告诉knockout只存储规则条件的Value
属性。即:它存储字符串isfilledout
或contains
。删除它,整个对象将被存储。相关文章:
- 控制器内部无法访问Angular js输入模型
- 控制器内部的scope函数不根据视图中的ng模型更新值
- 如果正在创建或更新项目,请在模型“validate”内部进行区分
- AngularJS - $watch内部的初始化,取决于两个模型
- 模型(和视图)未通过指令中的内部函数进行更新
- UI-select2 内部指令未更新控制器模型
- 如何传递ng模型对象而不是指令内部的值
- 如何获取模型内部的组件引用保存回调函数
- 视图内部的模型呈现:toJSON不是一个函数
- 使用ECMAScript/JavaScript对象模型按内部名称获取SharePoint列表
- Angular2-NgFor内部树模型:删除然后添加元素时顺序错误
- 设置模型属性的内部字段
- 在Sails中从模型内部获取当前用户
- 显示/隐藏基于下拉选择在knockoutJS与模型内部的另一个模型
- 发送带有模型内部错误的Ajax
- 使用一个对象数组作为主干模型内部的属性
- 从另一个控制器内部更新模型
- ng模型内部的ng transclude
- 当通过javascript动态设置时,angularjs控制器内部未定义输入文本框的ng模型值
- AngularJS-将单选按钮选择绑定到模型内部ng重复