我有一个包含“是/否”下拉列表的表单。如果选择“是”,我想使用模板生成n个新的html兄弟容器。如果他们永远不会选择“是”,我不想用空格式混淆html。
我想知道怎么做。
也许我可以将contains属性创建为observableArray()。那么,什么?,选择框上的自定义绑定运行一个检查选择框值的函数,如果是“是”,则抓取内容数组和$ .each()observableArray.push()?< / p>
是否有非自定义绑定方式来执行此操作?
感谢。
答案 0 :(得分:0)
当然,你可以通过手动订阅你的淘汰赛观察者的功能来做到这一点。您的视图模型可能如下所示:
var myModel = function(){
var self = this;
self.buildItems = ko.observable(false);//for the yes/no
self.items = ko.observableArray();
//ask knockout to run this function when the buildItems observable value changes
self.subscription = this.buildItems.subscribe(function(newValue){
if(newValue == 'true'){
//modify the items observableArray so that the UI is updated
var newItems = [{name:'item1'},{name:'item2'}];
self.items(newItems);
}
});
};
var model = new myModel();
然后您的模板可能如下所示:
<div id="bindContainer">
<select data-bind="value: buildItems">
<option value="false">No</option>
<option value="true">Yes</option>
</select>
<ul data-bind="foreach: items">
<li data-bind="text: name"></li>
</ul>
</div>
这是这种方法的一个小提琴:http://jsfiddle.net/vmebt/