knockout.js:嵌套导致重新订阅?

时间:2013-12-30 23:34:27

标签: javascript knockout.js

说,我们有:

var model = {
    parent: ko.obervable({
        child: ko.observable('')
    })
};

当我们致电model.parent(newParentValue)时,嵌套的child正在替换为新的child。是否会导致child的绑定从取代的{{1}}取消订阅并订阅新的绑定?

1 个答案:

答案 0 :(得分:0)

我不确定我应该如何回答你的问题。对于大多数意图和目的,答案是“是”,即:视图将递归地反映变化。您可以在this fiddle中使用以下代码进行检查:

Child is currently:
<span data-bind="text: parent().child"></span>
<hr />
<button data-bind="click: setNewParent">Set New Parent With New Child</button>

使用以下JS:

var model = {
    parent: ko.observable({
        child: ko.observable((new Date()).toTimeString())
    })
};

model.setNewParent = function() {
    model.parent({
        child: ko.observable((new Date()).toTimeString())
    });
};

ko.applyBindings(model);

如果您点击按钮,则会设置新的父级,您会注意到视图也会更新孩子。

如果我的问题更加文字化,可能会有一些细节。例如,我不确切知道DOM元素会发生什么。我想新的孩子是为新孩子创造的,旧孩子可能会丢弃。无论如何,对于这些详细和文字问题,我建议直接查看the KO source