2012-06-01 2 views
1

У меня есть таблица, которая «предполагается» привязана к результату json, но она не работает, какими могут быть ошибки?json and knockout

<table> 
<thead> 
    <tr> 
     <th> 
      Id 
     </th> 
     <th> 
      Number 
     </th> 
     <th> 
      Name 
     </th> 
     <th> 
      Password 
     </th> 
     <th> 
      Role 
     </th> 
    </tr> 
</thead> 
<tbody data-bind="foreach: model.Employees"> 
    <tr> 
     <td> 
      <span data-bind="text: EmployeeId"></span> 
     </td> 
     <td> 
      <span data-bind="text: EmployeeNumber"></span> 
     </td> 
     <td> 
      <span data-bind="text: EmployeeName"></span> 
     </td> 
     <td> 
      <span data-bind="text: EmployeePassword"></span> 
     </td> 
     <td> 
      <span data-bind="text: EmployeeRole"></span> 
     </td> 
    </tr> 
</tbody> 

мой нокаут сценарий, который заключается в следующем:

<script type="text/javascript"> 
$(document).ready(function() { 
    var viewModel = {}; 
    var data = $.getJSON("Employees.json", function (data) { 
     viewModel= ko.mapping.fromJSON(data); 
     ko.applyBindings(viewModel); 
    } 
    ); 
}); 
</script> 

вот мой образец вернулся JSon данные:

{"Employees":[{"EmployeeId":1,"EmployeeName":X","EmployeeNumber":"1","EmployeePassword":"x","EmployeeRole":"User"},{"EmployeeId":10,"EmployeeName":"S","EmployeeNumber":"21","EmployeePassword":"s","EmployeeRole":"Admin"}]} 
+0

Пожалуйста, добавьте этот промежуток в верхней и указать, что он показывает: '' –

+0

Возможный дубликат [привязки данных json с использованием нокаута] (http://stackoverflow.com/questions/10842900/связывание-JS on-data-using-нокаут) –

+0

сейчас используя угловой js .. ahaha! так долго нокаут ...; p –

ответ

4

Если вы откроете консоль ошибок ввода вашего браузера ставка вы видите примерно так:

Uncaught Error: Unable to parse bindings. Message: ReferenceError: Employees is not defined; Bindings value: foreach: Employees

Employees не определен на viewModel. Он, однако, определен на viewModel.model. Вещи должны работать, если вы либо:

  1. data-bind Еогеасп на model.Employees вместо:

    <tbody data-bind="foreach: model.Employees"> 
    

    Пример:http://jsfiddle.net/Ze2Zs/

  2. Назначают результаты вашего запроса AJAX непосредственно viewModel вместо viewModel.model:

    viewModel = ko.mapping.fromJSON(data); 
    

    Пример:http://jsfiddle.net/wHXeP/

Также как примечание стороны, нет никакой необходимости назначить var data = $.getJSON(...) как ответ обрабатывается с помощью функции обратного вызова:

var viewModel = {}; 
$.getJSON("Employees.json", function (data) { 
    viewModel.model = ko.mapping.fromJSON(data); 
    ko.applyBindings(viewModel); 
}); 
+0

я вижу в вашей скрипке, что viewModel = ko.mapping.fromJSON (данные); и ko.applyBindings (viewModel); находится вне данных var = {} ... но мой внутри, это нормально? –

+0

Я не заметил, что когда я впервые посмотрел на вопрос. Вероятно, вы должны избавиться от 'var data' вне запроса AJAX, но привязки привязки и код viewModel принадлежат внутри функции обратного вызова. Моя немного отличается, потому что я не делаю запрос AJAX. –

+0

вы правы, это говорит о том, что ошибка ... я редактировал мой код выше, однако он все еще не работает и эта ошибка продолжает отображаться –