我是KO新手,在我的html文件中,我正在打印这样的值-
<!-- ko foreach: { data: JSON.parse($parent.options), as: 'option' } -->
<!-- ko if: option.label === 'AAA' || option.label === 'BBB' -->
<dd class="values" data-bind="html: option.value"></dd>
<!-- /ko -->
<!-- /ko -->
其工作正常。但是我想要的是,我想将loop的所有值分配给一个变量,并希望在循环后打印。就像我们在php-
中所做的一样foreach($data as $key=> $index){
if($key==0)
$var = $index['value'];
else
$var .= ' '.$index['value'];
}
echo $var
想使用上述KO循环在KO的html文件中做同样的事情。
请帮助我。
谢谢
答案 0 :(得分:0)
您可以这样创建2个 computed
属性。
然后在parsedOptions
中循环通过foreach
。并将concatenatedValues
绑定到span
const JSONstring = JSON.stringify([{ label: "AAA", value: 1 },{ label: "BBB", value: 2 },{ label: "CCC", value: 3 }]);
const viewModel = function() {
this.options = JSONstring;
this.parsedOptions = ko.computed(() => {
return JSON.parse(this.options)
});
this.concatenatedValues = ko.computed(() => {
return this.parsedOptions().map(a => a.value).join(' ')
});
}
ko.applyBindings(new viewModel())
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script>
<!-- ko foreach: { data: parsedOptions, as: 'option' } -->
<!-- ko if: option.label === 'AAA' || option.label === 'BBB' -->
<dd class="values" data-bind="html: option.value"></dd>
<!-- /ko -->
<!-- /ko -->
<br> All values:
<span data-bind="text: concatenatedValues"></span>