我有多个输入框,我想根据用户的选择隐藏/取消隐藏它们。
我可以通过为每个输入设置一个单独的 dependentObservable 并依次使 dependentObservable 观察父级选择来实现此目的。
viewModel.showField1= ko.dependentObservable(function () {
return viewModel.selectedType() ? IsFeatureVisible(viewModel, "BusinessFieldName1") : false;
}, viewModel
);
viewModel.showField1= ko.dependentObservable(function () {
return viewModel.selectedType() ? IsFeatureVisible(viewModel, "BusinessFieldName2") : false;
}, viewModel
);
对于每个领域来说,这都是一件乏味的事情。我可以将元素与可以接受参数的依赖 Observable 函数绑定吗?重要的是当父级发生变化时应该触发它
其他选项是,当父级更改时,我循环遍历元素并隐藏/取消隐藏,但这需要我映射该字段的元素 id 公司名称。
Current
<tr data-bind="visible: showField1">
<tr data-bind="visible: showField2">
Desired
<tr data-bind="visible: showField('BusinessFieldName1')">
<tr data-bind="visible: showField('BusinessFieldName2')">
在 Knockout 中,绑定是使用 dependentObservable 在内部实现的,因此您实际上可以在绑定中使用普通函数来代替 dependentObservable。绑定将在 dependentObservable 内部运行您的函数,因此任何访问其值的 observable 都将创建依赖项(您的绑定在更改时将再次触发)。
这是一个示例:http://jsfiddle.net/rniemeyer/2pB9Y/ http://jsfiddle.net/rniemeyer/2pB9Y/
html
type "one", "two", or "three": <input data-bind="value: text" />
<hr />
<ul data-bind="template: { name: 'itemTmpl', foreach: items }"></ul>
js
<script id="itemTmpl" type="text/html">
<li data-bind="text: name, visible: viewModel.shouldThisBeVisible(name)"></li>
</script>
var viewModel = {
text: ko.observable("one"),
items: [{name: "one"}, {name: "two"}, {name: "three"}],
};
viewModel.shouldThisBeVisible = function(name) {
return this.text() === name;
}.bind(viewModel);
ko.applyBindings(viewModel);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)