如何使用 ko 遍历字符串列表
How to iterate over a list of string using ko
所以我有以下代码来显示从后端转发的警告消息,不幸的是它没有按预期工作。
<div data-bind="with: report">
<!-- ko foreach: warnings -->
<div data-bind="text: warnings[index()]"></div>
<!-- /ko -->
...
</div>
报告是一个 ko.observable 并由对后端的调用填充,当前 returns 一个警告,通知出现问题并防止后端崩溃。
report(ko.toJS(data));
后端的警告是此报告中的一个列表 class,其中包含多个带有对象的列表。由于我没有看到 js 文件中进一步定义的任何其他列表,我希望 warnigns 列表也出现在报告中,但不知何故消息没有显示。任何人都可以指出我所缺少的正确方向吗?
看到带有 foreach 的淘汰赛页面,他们只用对象举例...那么是否有可能甚至有一个简单的字符串数组?
可以使用$data
来引用迭代的当前元素:
ko.applyBindings({ arrayOfStrings: [ "hello", "world" ] });
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script>
<ul data-bind="foreach: arrayOfStrings">
<li data-bind="text: $data"></li>
</ul>
使用$data
需要一些特定于敲除的知识。如果您想避免这种情况,我建议您使用扩展的 foreach
绑定:foreach: { data: warnings, as: 'warning' }
:
ko.applyBindings({ warnings: [ "careful!", "watch out!" ] });
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script>
<ul data-bind="foreach: { data: warnings, as: 'warning' }">
<li data-bind="text: warning"></li>
</ul>
您当前尝试无效的原因:foreach
创建了一个新的绑定上下文。 warnings
将不再可直接访问,除非它是当前迭代主题元素的 属性。为了让它工作,你必须写 $parent.warnings[$index()]
:
ko.applyBindings({ arrayOfStrings: [ "hello", "world" ] });
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script>
<ul data-bind="foreach: arrayOfStrings">
<li data-bind="text: $parent.arrayOfStrings[$index()]"></li>
</ul>
所以我有以下代码来显示从后端转发的警告消息,不幸的是它没有按预期工作。
<div data-bind="with: report">
<!-- ko foreach: warnings -->
<div data-bind="text: warnings[index()]"></div>
<!-- /ko -->
...
</div>
报告是一个 ko.observable 并由对后端的调用填充,当前 returns 一个警告,通知出现问题并防止后端崩溃。
report(ko.toJS(data));
后端的警告是此报告中的一个列表 class,其中包含多个带有对象的列表。由于我没有看到 js 文件中进一步定义的任何其他列表,我希望 warnigns 列表也出现在报告中,但不知何故消息没有显示。任何人都可以指出我所缺少的正确方向吗?
看到带有 foreach 的淘汰赛页面,他们只用对象举例...那么是否有可能甚至有一个简单的字符串数组?
可以使用$data
来引用迭代的当前元素:
ko.applyBindings({ arrayOfStrings: [ "hello", "world" ] });
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script>
<ul data-bind="foreach: arrayOfStrings">
<li data-bind="text: $data"></li>
</ul>
使用$data
需要一些特定于敲除的知识。如果您想避免这种情况,我建议您使用扩展的 foreach
绑定:foreach: { data: warnings, as: 'warning' }
:
ko.applyBindings({ warnings: [ "careful!", "watch out!" ] });
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script>
<ul data-bind="foreach: { data: warnings, as: 'warning' }">
<li data-bind="text: warning"></li>
</ul>
您当前尝试无效的原因:foreach
创建了一个新的绑定上下文。 warnings
将不再可直接访问,除非它是当前迭代主题元素的 属性。为了让它工作,你必须写 $parent.warnings[$index()]
:
ko.applyBindings({ arrayOfStrings: [ "hello", "world" ] });
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script>
<ul data-bind="foreach: arrayOfStrings">
<li data-bind="text: $parent.arrayOfStrings[$index()]"></li>
</ul>