Javascript 如何重新绑定一个在Knockout中有不可观察对象的元素?

Javascript 如何重新绑定一个在Knockout中有不可观察对象的元素?,javascript,knockout.js,Javascript,Knockout.js,我如何重新绑定一个元素,它在敲除中有不可观察的对象?假设我有 <ul data-bind="attr:{ }, foreach: items"><li><a rel="external" data-bind="attr: { href: full }" ><img data-bind="attr: { src: thumb, alt: caption }" /></a></li></ul> 但如何重新绑定?这行

我如何重新绑定一个元素,它在敲除中有不可观察的对象?假设我有

<ul data-bind="attr:{ }, foreach: items"><li><a rel="external" data-bind="attr: { href: full }" ><img data-bind="attr: { src: thumb, alt: caption }" /></a></li></ul>
但如何重新绑定?这行不通

ko.applyBindings(updatedJsonObject, $element[0]);

如果您无法使阵列成为可观察阵列,那么您的主要选择是将整个结构放置在可观察阵列中,如:

var myStructure = ko.observable();

//update myStructure with new data
myStructure({[...]});
然后,你会像这样约束它:

<div data-bind="with: myStructure">
    <ul data-bind="attr:{ }, foreach: items"><li><a rel="external" data-bind="attr: { href: full }" ><img data-bind="attr: { src: thumb, alt: caption }" /></a></li></ul>
</div>


现在,即使数组不可见,只要您更新
myStructure
(可见),整个部分都将被重新呈现。

听起来好像您在拉入一个json对象并将其绑定到模板,然后获取一组新的json数据并想要更新显示的html?KokOutt的设计是将页面绑定到一个模型——我会考虑创建一个模型来保存你的数据,在这种情况下,你的完整/大拇指/字幕对象的一个SimababLayle,并更新该集合,而不是试图重新绑定。淘汰赛将负责更新,而无需rebind@JamesThorpe不幸的是,我不能让它明显的具体原因?对于要更新的项目,这是通常使用knockout的方法?也许你在寻找JS模板引擎,而不是KnockoutJS?@JamesThorpe,实际上JSON对象来自其他地方。谢谢。这似乎是工作。如果我遇到问题,我会进行更多的测试并让你知道。对不起,这在我的场景中也不起作用。问题是html和JSON来自本地移动应用程序。我目前正在做的是使html与第一次一样,然后再次应用绑定。请让我知道这个选项是否有任何缺点。我不确定我是否理解。你能把东西放在桌子中间吗?您通常不希望多次将绑定应用于相同的元素。这将添加额外的处理程序,每个元素将被更新多次。谢谢。实际上,应用程序对本机应用程序有很大的依赖性。这就是为什么我不使用observable。
<div data-bind="with: myStructure">
    <ul data-bind="attr:{ }, foreach: items"><li><a rel="external" data-bind="attr: { href: full }" ><img data-bind="attr: { src: thumb, alt: caption }" /></a></li></ul>
</div>