3

У меня есть таблица, «должны» быть переплетены с результатом в формате JSON:связывания данных JSON с помощью нокаута

<table> 
<thead> 
    <tr> 
     <th> 
      Id 
     </th> 
     <th> 
      Number 
     </th> 
     <th> 
      Name 
     </th> 
     <th> 
      Password 
     </th> 
     <th> 
      Role 
     </th> 
    </tr> 
</thead> 
<tbody data-bind="foreach: 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.model = ko.mapping.fromJSON(data); 
     ko.applyBindings(viewModel); 
    } 
    ); 
}); 
</script> 

Я пытаюсь связать стол с результатом json, но он не работает, где может быть проблема ... вот мой json в контроллере:

public ActionResult GetEmployees() 
    { 
     var r = db.Employees; 
     var s = new 
     { 
      Employees = r.Select(x => new { empId = x.Id, empName = x.Name, empNumber = x.Number, empPassword = x.Password, empRole = x.Role }).ToList() 
       .Select(x => new 
       { 
        EmployeeId = x.empId, 
        EmployeeName = x.empName, 
        EmployeeNumber = x.empNumber, 
        EmployeePassword = x.empPassword, 
        EmployeeRole = x.empRole 
       }).ToArray(), 
     }; 

     return Json(s, JsonRequestBehavior.AllowGet); 
    } 

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

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

ko.applyBindings (viewModel.Model); Кроме того, предложение @ madcapnmckay о запуске dev-консоли отлично. Сообщения об ошибках нокаута полезны. Или viewModel = ko.mapping.fromJSON (данные); – kenny

+0

Что я должен изменить? я не получил то, что вы прокомментировали ... –

+0

Если вы не получаете ошибок в консоли разработчика, F12 во многих браузерах, не уверен. Похоже, что то, что вы выше, не будет связывать, и я бы ожидал ошибок. Либо один из двух изменений в вашем коде, который я оказал, я бы подумал, что он будет привязан. – kenny

ответ

4

Предполагая, что на стороне сервера все нормально, ваша модель привязки к .MODEL собственности, но так что ваш Еогеасп должен быть

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

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

Возможно, вы захотите использовать средства разработки firebug или chrome и подтвердить, какие ошибки javascript вы получаете, если таковые имеются, также проверьте ответ, чтобы убедиться, что ваш метод действия возвращает данные.

EDIT

OK вот jsfiddle вашего кода. Несколько вещей, возможно опечаток, но на всякий случай. Недопустимый тег в вашей разметке, и в вашем json перед комментарием EmployeeName есть комментарий с незавершенным завершением.

http://jsfiddle.net/madcapnmckay/3rRUQ/1/

Вам нужно к model.Employees, как указано выше. Поскольку вы возвращаете json из mvc, у него будут правильные заголовки, поэтому jquery автоматически преобразует их в объект javascript, так что не нужно использовать fromJSON, вместо этого попробуйте JS.

Надеюсь, это поможет.

+0

это не сработало ... –

+0

Невозможно помочь без дополнительной информации. Какие ошибки вы видите в консоли? – madcapnmckay

+0

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

0
<script id="tmpl_ScreenNavigation" type="text/html"> 
<tr class="erow"> 
    {{if ScreenParentNevigationId}} 
    <td width="250px"><table cellpadding="5" class="Permission" sceenid="${ScreenNevigationId}" border="0" RoleDetailId="0"><tr><td><label><input type="checkbox" id="view${ScreenNevigationId}" class="View" />&nbsp;View</label></td><td><label><input type="checkbox" id="AddModify${ScreenNevigationId}" class="Save"/>&nbsp;Add/Modify</label></td><td><label><input type="checkbox" id="Delete${ScreenNevigationId}" class="Delete" />&nbsp;Delete</label></td></tr></table></td> 
    {{/if}} 
    {{if !ScreenParentNevigationId}} 
    <td {{if !ScreenParentNevigationId}} style="background-color: #F9BDC8;"{{/if}} width="250px"><table cellpadding="5" class="Permission" sceenid="${ScreenNevigationId}" border="0" RoleDetailId="0"><tr><td {{if !ScreenParentNevigationId}} style="background-color: #F9BDC8;"{{/if}}><label><input type="checkbox" id="view${ScreenNevigationId}" class="View" />&nbsp;View</label></td></tr></table></td> 
    {{/if}} 
    <td {{if !ScreenParentNevigationId}} style="background-color: #F9BDC8;"{{/if}}>${ScreenName}</td> 
    <td {{if !ScreenParentNevigationId}} style="background-color: #F9BDC8;"{{/if}}>${ScreenDescription}</td> 
</tr> 
</script> 

$ ("# tmpl_ScreenNavigation") Tmpl (resultJson) .appendTo ("# tblRoles").;

+1

создать шаблон javascript, а затем привязать данные json к таблице: $ ("# tmpl_ScreenNavigation"). Tmpl (resultJson).appendTo ("#") tblRoles – user1983579

0

Измените местоположение вашего тега JavaScript в верхней части html-файла непосредственно над таблицей. Из-за этого данные могут быть неправильно заполнены.