【发布时间】:2012-03-12 18:53:00
【问题描述】:
我正在尝试使用 knockout.js 在 UI 上显示规范对象。该规范有一个名称,它有几个 parameterInfo 行。每个 ParameterInfo 行都有一个 ParameterPartNumber 和一堆 SignalInput。每个 SignalInput 只有一个名为 Name 的属性。我能够显示规范名称、parameterInfo 行和 ParameterPartNumber,但无法显示我拥有的一堆 SignalInput 名称,即使 SpecificationModel 具有这些值。我正在使用以下代码:
HTML 代码:
<div id="specificationHeader">
Name : <input data-bind='value: Name' />
<br />
<br />
</div>
<table>
<thead>
<tr>
<th>
Parameter Part
</th>
<th>
Signal Inputs
</th>
</tr>
</thead>
<tbody data-bind="foreach: ParameterInfos">
<tr>
<td>
<input data-bind='value: ParameterPartNumber' />
</td>
<td>
<ul data-bind="foreach: SignalInputs">
<li><span data-bind='text: Name' /></li>
</ul>
</td>
</tr>
</tbody>
</table>
Javascript/敲除代码:
<script type="text/javascript">
var SpecificationModel = function (specification) {
var self = this;
self.Name = ko.observable(specification.Name);
self.ParameterInfos = ko.observableArray(ko.utils.arrayMap(specification.ParameterInfos, function (ParameterInfo) {
return { ParameterPartNumber: ParameterInfo.ParameterPartNumber, SignalInputs: ko.observableArray(ParameterInfo.SignalInputs) };
}));
};
var specificationData = '@Html.Raw(ViewBag.SpecificationData)';
var viewModel = new SpecificationModel($.parseJSON(specificationData))
ko.applyBindings(viewModel);
</script>
当我在调试模式下运行程序时,我可以看到以下值:
var specificationData = '{"Name":"Specification One",
"ParameterInfos": [{"ParameterPartNumber":"26-20700-002", "SignalInputs":[{"Name":"Park Brake"},{"Name":"Neutral"}]} ]}';
这很奇怪,因为由于以下问题的答案,我能够得到一个几乎相似的示例:
Need to pass initial viewmodel data from ASP.NET MVC to knockout.js
但不知何故,绑定代码无法正常工作。我错过了什么?
编辑:
好的,以下几行有效:
<td data-bind="foreach: SignalInputs">
<ul >
<li><span data-bind='text: Name' /></li>
</ul>
</td>
但是,以下几行没有
<td>
<ul data-bind="foreach: SignalInputs">
<li><span data-bind='text: Name' /></li>
</ul>
</td>
知道为什么吗?后一行在我引用的另一个 stackoverflow 示例问题中工作。
【问题讨论】:
-
也许你可以复制这个小提琴:jsfiddle.net/rniemeyer/qXCLu
-
感谢@RP Niemeyer。我检查了小提琴,它似乎和我有同样的问题。它不显示 SignalInputs。实际上,它没有显示任何数据。
-
你用的是什么浏览器?它在 Chrome/IE9/Firefox 中显示 Park Brake 和 Neutral。你在小提琴上看到了什么?
-
我在 Chrome、IE 9 和 IE 8 上尝试过。在其中任何一个上都不起作用。
-
您可以检查开发控制台是否有错误或查看网络选项卡吗?否则,单击“管理资源”并尝试导航到 KO 文件的链接。似乎您没有从您的位置正确地获得文件。在所有浏览器中对我来说都很好。