2013-01-09 38 views
0

如何重新绑定在Knockout中具有不可观察对象的元素?比方说,我有如何重新绑定在Knockout中有不可观察对象的元素?

​​

我能正确绑定此,

{ 
"items":[ 
        { "full": "Content\/ImageGallery\/full\/20120502_180612_Josh_Wave_Pint.jpg", "thumb": "content\/imagegallery\/thumb\/20120502_180612_Josh_Wave_Pint.jpg", "caption": "Picture" }, 
        {"full":"Content\/ImageGallery\/full\/20130109_173902.jpg","thumb":"content\/imagegallery\/thumb\/20130109_173902.jpg","caption":"Picture"}, 
        { "full": "Content\/ImageGallery\/full\/20130107_193641.jpg", "thumb": "content\/imagegallery\/thumb\/20130107_193641.jpg", "caption": "Picture" } 
        ] } 

但如何重新绑定呢?这不作品,

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

这听起来像你拉一个JSON对象,并将其绑定到您的模板,然后得到一组新的JSON数据,并希望更新显示的HTML?淘汰赛的目的是将页面绑定到模型 - 我会考虑创建一个模型来保存您的数据,在这种情况下,您的完整/ thumb/caption对象的observableArray并更新该集合,而不是尝试重新绑定。淘汰赛将照顾的更新而无需重新绑定 –

+0

@JamesThorpe,不幸的是我不能让它可观察 – user960567

+0

任何特定的原因?那就是你想要更新的物品的淘汰路线? –

回答

2

如果你无法让你的阵列的observableArray,那么你的主要办法是,将整个结构放置一个可观察的像内:

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(这是观察到的),整款将重新渲染。

+0

谢谢。这似乎是工作。如果我遇到问题,我会进行更多测试并通知您。 – user960567

+0

对不起,但这也不适合我的情景。问题是html和JSON来自原生移动应用程序。我目前正在做的是使html与第一次相同,然后再次应用绑定。请让我知道这个选项是否有缺点。 – user960567

+0

不知道我明白了。你可以把东西放在jsFiddle中吗?您通常不会希望多次将绑定应用于相同的元素。这将添加额外的处理程序,每个元素将被多次更新。 –

相关问题