我有一个简单的html页面,我在客户端使用jquery,jqueryui和knockout以及来自Web服务的一些数据动态创建。
我用这样的代码动态创建一些标签:
document.getElementById("myDiv").innerHTML = dynamicTags;
然后我打电话给ko.applyBindings:
ko.applyBindings(Datas, document.getElementById("myDiv"));
这根本行不通;在chrome调试器中没有引发异常。
我用这段代码做了一些随机测试:
setTimeout(function () {
ko.applyBindings(Datas, document.getElementById("myDiv"));
}, 3000);
一切都很完美。
为什么会这样?我同时绑定了值和样式。
点击按钮调用此代码!
答案 0 :(得分:3)
确保将绑定应用于DOM末尾的脚本或已加载DOM的脚本中。在jQuery中,可以通过以下方式完成:
$(document).ready(function() {
// apply bindings here
});
否则,在将HTML完全加载到内存甚至下载之前,可能会调用内联脚本。
答案 1 :(得分:0)
有可能你的代码没有被执行(或被绑定执行),因为它可以with和without点击我眼中的按钮。
function goLetsGo(){
var html = '<fieldset>'
+ '<legend data-bind="text:fullname"></legend>'
+ '<p>First Name: <span data-bind="text:firstname"></p>'
+ '<p>Last Name: <span data-bind="text:lastname"></p>'
+ '<p>Age: <span data-bind="text:age"></p>'
+ '</fieldset>';
document.getElementById('myDiv').innerHTML = html;
var vm = function(){
this.firstname = ko.observable('Brad');
this.lastname = ko.observable('Christie');
this.fullname = ko.computed(function(){
return this.firstname() + ' ' + this.lastname();
}, this);
this.age = 27;
};
ko.applyBindings(new vm(), document.getElementById('myDiv'));
}
结果:
<fieldset>
<legend data-bind="text:fullname">Brad Christie</legend>
<p>First Name: <span data-bind="text:firstname">Brad</span></p>
<p>Last Name: <span data-bind="text:lastname">Christie</span></p>
<p>Age: <span data-bind="text:age">27</span></p>
</fieldset>
检查以确保调用代码。此外,确认您没有任何绑定错误(例如引用不存在的属性或尝试使用未声明的绑定)。