3

我有一个简单的 html 页面,我使用 jquery、jqueryui 和敲除以及来自 Web 服务的一些数据在客户端动态创建。

我使用如下代码动态创建一些标签:

document.getElementById("myDiv").innerHTML = dynamicTags;

然后我打电话给ko.applyBindings:

ko.applyBindings(Datas, document.getElementById("myDiv"));

这根本行不通。chrome 调试器中不会引发任何异常。

我用这段代码做了一些随机测试:

setTimeout(function () {
    ko.applyBindings(Datas, document.getElementById("myDiv"));
}, 3000);

一切都很完美。

为什么会这样?我同时绑定值和样式。

此代码通过单击按钮调用!

4

2 回答 2

3

确保在 DOM 末尾的脚本中或在加载 DOM 时应用绑定。在 jQuery 中,这可以通过以下方式完成:

$(document).ready(function() {
    // apply bindings here
});

否则,可能会在 HTML 完全加载到内存甚至下载之前调用内联脚本。

于 2013-09-06T13:37:00.063 回答
0

很有可能您的代码没有被执行(或一定会被执行),因为它可以我的眼睛中点击和不点击按钮的情况下工作。

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>

检查以确保代码被调用。此外,请确认您没有任何绑定错误(例如引用不存在的属性,或尝试使用未声明的绑定)。

于 2013-09-06T13:47:28.860 回答