我有一个可观察的,几个可观察的数组。我想迭代这些可观察数组,具体取决于我有什么可观察数据。听起来多么神秘。如果是,那么fiddle会使它变得非常简单
function VM(){
var self = this;
this.type1 = ko.observableArray(['Hello', 'this', 'is', 'first', 'array']);
this.type2 = ko.observableArray(['Second', 'Array']);
this.type3 = ko.observableArray(['hohoho', 'hahaha']);
this.type = ko.observable('type1')
this.setType = function(t){
self.type(t);
}
}
ko.applyBindings(new VM())
因此,根据我点击的按钮,我希望迭代不同的数组。
<button data-bind="click: function(){setType('type1')}">Type1</button>
<button data-bind="click: function(){setType('type2')}">Type2</button>
<button data-bind="click: function(){setType('type3')}">Type3</button>
<div data-bind='text: type'></div><br>
<ul data-bind="foreach: type1">
<li data-bind="text: $data">
</ul>
如您所见,单击按钮会更改observable,但我无法更改将要迭代的数组。我怎样才能做到这一点?
答案 0 :(得分:2)
一种方法是使用计算...
this.selectedType = ko.computed(function() {
return self[self.type()]();
});
<ul data-bind="foreach: selectedType">
<li data-bind="text: $data">
</ul>
答案 1 :(得分:1)
修改您的ul
,如下所示:
<ul data-bind="foreach: $root[type()]">
<li data-bind="text: $data">
</ul>
$root
由knockout
提供,并引用最初指定给ko.applyBindings
来电的对象。