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