javascript - KO 引用错误 : Unable to process binding

标签 javascript knockout.js

Uncaught ReferenceError: Unable to process binding "foreach: function (){return Educations }"

Uncaught ReferenceError: Unable to process binding "foreach: function (){return WorkExperience }"

我无法弄清楚绑定(bind)失败的原因。

我有以下两个表,一个用于教育,另一个用于工作经验,当我试图在一个 View 中绑定(bind)两个表时,它们会给出错误,如果我删除绑定(bind)(JS + HTML 代码)它工作正常

HTML:

<div id=divtable1 class="widget widget-simple widget-table">
   <table id="Table1" class="table table-striped table-content table-condensed boo-table table-hover">
      <thead>
         <tr id="Tr1" class="filter">
            <th>University<span class="required">*</span></th>
            <th>Location <span class="required">*</span></th>
            <th></th>
         </tr>
      </thead>
      <tbody data-bind='foreach: Educations'>
         <tr>
            <td><input type="text" class='span11 required' data-bind="value: SchoolName" /></td>
            <td><input type="text" class='span11 required' data-bind="value: Location" /></td>
            <td><a href='#' data-bind='click: $root.removeEducation'>Delete</a></td>
         </tr>
      </tbody>
   </table>
   <button data-bind='click: $root.addEducation' class="btn btn-blue">Add Education</button>
</div>
<div id="divtable2">
   <table id="Table2">
      <thead>
         <tr id="Tr2" class="filter">
            <th>Employer Name<span class="required">*</span></th>
            <th>EmployerAddress <span class="required">*</span></th>
            <th></th>
         </tr>
      </thead>
      <tbody data-bind='foreach: WorkExperience'>
         <tr>
            <td><input type="text" class='span11 required' data-bind="value: EmployerName" /></td>
            <td><input type="text" class='span11 required' data-bind="value: EmployerAddress" /></td>
            <td><a href='#' data-bind='click: $root.removeWorkExperience'>Delete</a></td>
         </tr>
      </tbody>
   </table>
   <button data-bind='click: $root.addWorkExperience' class="btn btn-blue">Add Work Experience</button>
</div>

Java 脚本:

<script type="text/javascript">
    var Educations = function (educations) {

        var self = this;
        self.Educations = ko.mapping.fromJS(educations);

        self.addEducation = function () {
            self.Educations.push({"SchoolName": ko.observable(""), "Location": ko.observable("")});
        };

        self.removeEducation = function (education) {
            self.Educations.remove(education);
        };
    };

    var viewModel = new Educations(@Html.Raw(Newtonsoft.Json.JsonConvert.SerializeObject(Model.Educations)));
    ko.applyBindings(viewModel);
</script>


<script type="text/javascript">
    var WorkExperience = function (workexperiences) {

        var self = this;
        self.WorkExperience = ko.mapping.fromJS(workexperiences);

        self.addWorkExperience = function () {
            self.WorkExperience.push({ "EmployerName": ko.observable(""), "EmployerAddress": ko.observable("")});
        };
        self.removeWorkExperience = function (workexperience) {
            self.WorkExperience.remove(workexperience);
        };
    };

    var viewModel = new WorkExperience(@Html.Raw(Newtonsoft.Json.JsonConvert.SerializeObject(Model.WorkExperience)));
    ko.applyBindings(viewModel);
</script>

我也试过绑定(bind)Table1,但是没用

ko.applyBindings(viewModel, $('#Table1')[0]);

最佳答案

尝试添加这个 <pre data-bind="text: ko.toJSON($data, null, 2)"></pre>以你的观点。它将输出 knockout 在当前上下文中包含的数据。

您还有一个 View 和两个试图绑定(bind)到它的 View 模型。创建一个将 Educations 和 WorkExperience 作为属性的 View 模型。

有点像

var vm = {
  Educations : educationViewModel,
  WorkExperience: workExperienceViewModel
}

ko.applyBindings(vm);

关于javascript - KO 引用错误 : Unable to process binding,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22364240/

相关文章:

javascript - jQuery 单击打开引导模式并更改选择选项

javascript - 属性符合我的值(value)

javascript - 如何重新格式化这个javascript数组?

javascript - 仅处理一次 mouseenter

knockout.js - 从另一个组件访问组件的数据

javascript - jQuery 在每个循环内单击

knockout.js - 单选按钮 Knockoutjs

javascript - 通过 javascript 更改值时元素不更新错误状态

list - 如何在knockout.js中制作按钮而不是项目

knockout.js - 按项目对列表进行排序,按字母顺序排列