Knockout.js - 动态应用模板

时间:2013-05-22 16:23:07

标签: knockout.js knockout-2.0

我有一个包含“是/否”下拉列表的表单。如果选择“是”,我想使用模板生成n个新的html兄弟容器。如果他们永远不会选择“是”,我不想用空格式混淆html。

我想知道怎么做。

也许我可以将contains属性创建为observableArray()。那么,什么?,选择框上的自定义绑定运行一个检查选择框值的函数,如果是“是”,则抓取内容数组和$ .each()observableArray.push()?< / p>

是否有非自定义绑定方式来执行此操作?

感谢。

1 个答案:

答案 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/