Data binding 敲除绑定问题:已定义匿名模板,但未提供模板内容

Data binding 敲除绑定问题:已定义匿名模板,但未提供模板内容,data-binding,foreach,knockout.js,Data Binding,Foreach,Knockout.js,我有一些javascript代码,可以打开一个模式并将绑定应用到我的knockout viewmodel。 当模态打开时,会有第二个选项卡,单击时,会触发一个ajax调用,并使用返回的数据(人员,有时是空数组)设置一个ObservalArray。 下面的html代码遍历数组,并显示人员的姓名 这在我第一次单击打开模式时工作正常,但在任何其他单击中都不起作用,显示错误已定义匿名模板,但控制台中未提供模板内容。 我已经花了2天的时间在这个问题上,看不到问题在哪里,尽管我怀疑它可能在我的绑定方法中 我

我有一些javascript代码,可以打开一个模式并将绑定应用到我的knockout viewmodel。 当模态打开时,会有第二个选项卡,单击时,会触发一个ajax调用,并使用返回的数据(人员,有时是空数组)设置一个ObservalArray。 下面的html代码遍历数组,并显示人员的姓名

这在我第一次单击打开模式时工作正常,但在任何其他单击中都不起作用,显示错误
已定义匿名模板,但控制台中未提供模板内容。
我已经花了2天的时间在这个问题上,看不到问题在哪里,尽管我怀疑它可能在我的绑定方法中

我无法在笔中重现错误,因为它使用Ajax调用,我不知道如何模仿

HTML:

JS用于显示模式、应用绑定等:

。。在某些按钮上单击…:

 $('#myPeopleModal').on('hidden.bs.modal', function () {
     // do something....
 });

 ko.cleanNode(document.getElementById('myPeopleModal'));

 var myM = new myModel();
 ko.applyBindings(myM, document.getElementById('myPeopleModal'));
 $('#myPeopleModal').removeClass("hide").modal('show');
  • 如果我用
    foreach:people
    注释该部分,模态将打开和关闭,没有任何问题
  • 如果我删除ajax调用并只保留可观察集一次,那么模型就会打开和关闭,不会出现问题
  • 我还在模型中设置了其他观察值,它们工作得很好(为了简化而删除了它们)
  • 我也尝试过ko注释语法,但得到了完全相同的结果
  • 淘汰赛3.5.1


    感谢您的帮助。

    请参阅第一个函数,该函数使用一个简单的超时承诺来假装异步调用:)

    如果您不想通过使用knockout钩住bs事件,请记住将所有knockout属性重置为其init状态,以便下一个模态显示一切正常

    这可能不是最“干净”的方式,因为我们在关闭模式时使用jquery重置为第一个选项卡,但老实说,如果您只需要模式上的applyBindings,那么它的工作原理是什么

    console.clear();
    var$fakeAsync=函数(api,结果){
    var dfd=$.Deferred(()=>setTimeout(函数()){
    解决(结果);
    }, 500));
    返回dfd.promise();
    };
    ko.applyBindings(()=>{
    var self=这个;
    self.people=ko.observearray([]);
    自加载=可观察(假);
    self.activatePeople=函数(){
    自加载(真);
    自我人([]);
    $fakeAsync('/api/fake',['john','karen','franz'])。完成(函数(结果){
    自我、人(结果);
    }).始终(()=>自加载(false));
    };
    self.resetOnClose=函数(){
    $(“#示例模态#主选项卡”)。单击();
    自我人([]);
    自加载(假);
    返回true;
    };
    },$('#exampleModal')。获取(0))
    
    
    启动演示模式
    情态标题
    &时代;
    
    单击上面的“人员”选项卡 加载。。
    接近 保存更改
    var myModel = function myViewModel() {
          self.people = ko.observableArray([{ "FullName": "Joe", "Email": "Joe@gmail.com" }]);
    
      // setTimeout to try mimic ajax call?
      setTimeout(function() {
        self.people([])
      }, 6000)
    ....
    // ajax call within 'myModel' but also doesn't work  if I put it in the section where I show the modal
     $.ajax({
                url: "/api/people",
                type: "GET",
                success: function (data) {                
                    self.people(data);
                },
                error: function (err) {
                    alert(err.responseJSON.message);
                }
            });
    }
    
     $('#myPeopleModal').on('hidden.bs.modal', function () {
         // do something....
     });
    
     ko.cleanNode(document.getElementById('myPeopleModal'));
    
     var myM = new myModel();
     ko.applyBindings(myM, document.getElementById('myPeopleModal'));
     $('#myPeopleModal').removeClass("hide").modal('show');