无法使用knockout绑定记录

时间:2013-09-14 19:55:29

标签: asp.net-mvc-4 knockout.js

通过使用以下文章:http://www.dotnetcurry.com/ShowArticle.aspx?ID=847,我尝试开发示例应用。为了保持分离,我尝试将javascript代码移动到单独的js文件: EmployeeInfo.js 并引用Create.cshtml的head部分中的js文件,如下所述:

<head>    
     <script src="~/Scripts/EmployeeInfo.js"></script>
</head>

但我无法显示数据库中的现有记录。在调试代码时,我发现调用了GetEmployees()方法,并且data.length也大于0,但是数据无法与表绑定以显示所有记录。对此有任何帮助表示赞赏。

<tbody data-bind="foreach: Employees">
                                <tr style="border: solid" data-bind="click: $root.getselectedemployee" id="updtr">
                                    <td><span data-bind="text: EmpNo"></span></td>
                                    <td><span data-bind="text: EmpName"></span></td>
                                    <td><span data-bind="text: Salary"></span></td>
                                    <td><span data-bind="text: DeptName"></span></td>
                                    <td><span data-bind="text: Designation"></span></td>
                                    <td>
                                        <button data-bind="click: $root.deleterec">Delete</button></td>
                                </tr>
                            </tbody>

任何人都可以帮我理解这个问题。

谢谢&amp;问候, Santosh Kumar Patro

1 个答案:

答案 0 :(得分:0)

没有看到工作代码,我唯一的猜测是你在页面渲染之前应用了绑定。注意步骤8的说明:

  

步骤8:在关闭body标签之前定义块所在的位置   ViewModel将定义如下:

您已将代码移动到单独的文件中,这很好,但您已将其移至head标记中。 DOM操作顺序将在<body>有机会呈现之前加载并执行此脚本,因此ko.applyBindings绑定到任何内容。你有两个选择。

将脚本声明移到关闭正文标记之前:

    <script src="~/Scripts/EmployeeInfo.js"></script>
</body>

或者,假设您正在使用jQuery,请将您的脚本代码包装在文档就绪函数内的此文件中:

$(function (){
    // ... Your code ...
});