Javascript knockout.js observablearray推送不绑定单击

Javascript knockout.js observablearray推送不绑定单击,javascript,jquery,html,knockout.js,Javascript,Jquery,Html,Knockout.js,我有一些html,如下所示: <table id="table"> <thead> <tr> <th>Employee ID</th> <th>Name</th> <th>Role</th> <th>Actions</th> <

我有一些html,如下所示:

<table id="table">
    <thead>
        <tr>
            <th>Employee ID</th>
            <th>Name</th>
            <th>Role</th>
            <th>Actions</th>
        </tr>
    </thead>
    <tbody data-bind="foreach: Employees">        
        <tr>
            <td data-bind="text: Empid"></td>
            <td data-bind="text: Name"></td>
            <td data-bind="text: Role"></td>
            <td>
                <a data-bind="click: editEmployee">Edit</a>
            </td>
        </tr>            

    </tbody>
</table>

<div id="createForm">
    <input id="empidC" />
    <input id="nameC" />
    <input id="roleC" />
    <button type="button" id="insertEmployee">Create</button>
</div>
当我在div“createForm”中插入任何新记录时,我得到一个错误:

未捕获引用错误:无法处理绑定“单击:函数(){return editEmployee}” 消息:未定义editEmployee

将显示新行,但新插入记录的编辑链接不起作用

编辑:

我解决了这个问题。问题是“对象”被传递给员工(数据),而不是“员工”。因此,在insertEmployee单击中,我将代码更改为:

            var newEmp = new Employees({
                Empid: empidC,
                Name: nameC,
                Role: roleC
            });

            eList.Employees.push(newEmp);

数据是否实际到达服务器端控制器并更新数据库?在成功部分中,在服务器上发布数据和调用Create方法的ajax调用假定服务器上一切正常。这里所有的成功路径都是说客户端调用正常,而不是服务器成功。如果您当前有警报语句,则需要确保服务器端在稍后刷新页面时尝试检索数据之前确实发布了数据。

数据是否确实到达服务器端控制器并更新数据库?在成功部分中,在服务器上发布数据和调用Create方法的ajax调用假定服务器上一切正常。这里所有的成功路径都是说客户端调用正常,而不是服务器成功。如果您当前有警报声明,则需要确保服务器端在稍后刷新页面时尝试检索数据之前确实发布了数据。

我不确定发生了什么,但是您不应该在绑定处理程序之外摆弄DOM。@RoyJ我不明白您处理单击绑定的方式以及与jQuery的对话框表明存在问题。Knockout有一个
单击
绑定,您应该为对话框创建一个自定义绑定。不过,我不知道这是否与您遇到的错误有关。我不确定发生了什么,但您不应该在绑定处理程序之外摆弄DOM。@RoyJ我不知道您处理单击绑定的方式以及与jQuery的对话框表明存在问题。Knockout有一个
单击
绑定,您应该为对话框创建一个自定义绑定。不过,我不知道这是否与您得到的错误有关。数据将发送到控制器,并在DB中更新,警报语句正在执行2个函数,您在其中声明它。Empid=ko.observable(data.Empid);等等,把这些移到主代码块上。你应该只需要声明这些是可观察的一次,然后击倒应该保持跟踪谢谢你的帮助,但我已经编辑了这个问题,并指定了问题及其解决方案是什么数据将发送到控制器并在DB中更新,并且警报语句正在执行2个函数,其中声明了这个。Empid=ko.observable(data.Empid);等等,把这些移到主代码块上。您应该只需要将这些声明为可观察一次,然后knockout应该保持跟踪谢谢您的帮助,但我已经编辑了问题并指定了问题及其解决方案
            var newEmp = new Employees({
                Empid: empidC,
                Name: nameC,
                Role: roleC
            });

            eList.Employees.push(newEmp);