popup没有绑定,重新应用清除整个viewmodel

时间:2013-06-12 21:33:42

标签: templates knockout.js

http://jsfiddle.net/scottbeeson/SRUKN/24/

我正在使用它来创建一个新的div:

$("<div/>", {
    class: "itemView",
    id: name,
    "data-bind": "template: { name: 'tmplItemView' }"
}).appendTo("body")

模板具有正确的数据绑定

<script type="text/html" id="tmplItemView">
    <div class="itemHeader" data-bind="text: name">Item Name</div>
    <span id="itemClose" class="closeWindow"><i class="icon-remove">X</i></span>
</script>

但是当我触发创建时,它会在DOM中创建一个空div。如果我之后立即应用了绑定,模板似乎正常工作(即DIV不为空),但它会清除整个视图模型。

之前我已经解决了这个问题,但我认为现在的区别在于我正在使用jquery函数来捕获点击而不是使用knockout的点击绑定。

1 个答案:

答案 0 :(得分:1)

我看了一眼,找到了解决方法。请参阅:http://jsfiddle.net/SRUKN/26/

function createItemDiv(item) {
    console.log('Creating div from template');
    var $el = $("<div/>", {
        class: "itemView",
        id: item.name(),
        "data-bind": "template: { name: 'tmplItemView' }"
    });
    $el.appendTo("body");
    $el.draggable();
    ko.applyBindings(item, $el.get(0));
}

基本上,我只是通过传递要绑定到的VM以及目标元素来确保applyBindings调用更具针对性。