无法将ko.observable数组绑定到foreach循环

时间:2012-06-08 07:02:40

标签: knockout.js knockout-mapping-plugin ko.observablearray

我有一个简单的viewModel,我从MVC for到json字符串创建,我使用ko.mapping来完成此任务。

var initialTicketData = {"Ticket": [{"ID":1,"EventID":506596,"Name":"General Admission","Quantity":100,"Price":15.0},{"ID":2,"EventID":506596,"Name":"Backstage Passes","Quantity":25,"Price":50.0}]};

var ticketViewModel = ko.mapping.fromJS(initialTicketData);

ko.applyBindings(ticketViewModel);

我想遍历此数组并在页面上显示数据。我正在尝试使用foreach数据绑定。

<tbody data-bind="foreach: ticketViewModel.Ticket">
    <tr>
        <td data-bind="text: ticketViewModel.Name"></td>
        <td data-bind="text: ticketViewModel.Price"></td>
        <td data-bind="text: ticketViewModel.Quantity"></td>
    </tr>
</tbody>

但是,当我尝试运行时,我收到以下错误。

  

&#34;无法解析绑定。消息:ReferenceError:未定义ticketViewModel;绑定值:foreach:ticketViewModel.Ticket&#34;

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

请改为尝试:

<tbody data-bind="foreach: Ticket">
    <tr>
        <td data-bind="text: Name"></td>
        <td data-bind="text: Price"></td>
        <td data-bind="text: Quantity"></td>
    </tr>
</tbody>

绑定始终与当前上下文相关。当您说ko.applyBindings(ticketViewModel);时,您将“根”上下文设置为ticketViewModel。然后当你使用'foreach'时,你会添加一个新的上下文,'foreach'中的绑定现在相对于每个Ticket元素。