2013-07-19 7 views
8

Ben bir div conent temsil ko.observable şöyle içeren bir görünüm modeli var, yeni elemanlar bağlayıcı değildir bağlayıcı kullanarak: Bazı sonraki bir zamandaKnockoutJS: 'html'

function claimContainerViewModel(elem, api) { 
    this.content = ko.observable('<somecontent>'); 
} 

, ben güncelleştirmek AJAX çağrısı kullanarak bu içerik ve aşağıdaki bağlama ile bir div var: HTML 'içerik' için döndü

<div id="ClaimContainer" data-bind="html: content"> 

veri bağlamak en kendi var vardır ve bu konudur: bu ciltleri hiçbiri vardır ayrıştırılıyor. Nakavt'a ve okuduğum her kaynağa göre bunun olması gerekiyor. 'Html' bağlayıcısını kullanırken, KO'nın yeniden bağlama yapmak için yeterince akıllı olması gerekir.

Bu, KO 2.2.0'daki bir hata mı (bu saniye içinde takılıyorum) veya html bağlayıcı işleyicinin nasıl çalıştığını yanlış yorumlu muyum? Ve kimse soramazsa, bu durumda herhangi birBindings çalışmayacaktır, çünkü kapsayıcı bir html bağını kullanır; bu, applyBindings'in yeniden bağlamayı ele alması gerektiğini varsayar (bunu KO'nun koduna girerek onayladım).

cevap

12

GÜNCELLEME:

Bu benim özel bağlama son sürümüdür. Bu, artık otomatik olarak çalışır, iki kez bağlanmaz ve tıpkı 'html' bağlama gibi çalışır, ancak daha dinamiktir.

if (!ko.bindingHandlers['dynhtml']) { 
    ko.bindingHandlers['dynhtml'] = { 
     'init': function() { 
      return { 'controlsDescendantBindings': true }; 
     }, 
     'update': function (element, valueAccessor, allBindings, viewModel, bindingContext) { 
      ko.utils.setHtml(element, valueAccessor()); 
      ko.applyBindingsToDescendants(bindingContext, element); 
     } 
    }; 
} 

, HTML'nizde kaynağını bilmiyorsanız bu güvensiz olabileceğini dikkat LÜTFEN Lütfen, lütfen. Çok güvensiz. Eğer dengesiz kullanıcı girişi onu HTML'nize ulaştırabiliyorsa, bu büyük bir güvenlik deliği olabilir, bu yüzden çapraz site komut dosyası saldırılarına dikkat edin.

+0

Bir uyarı: Bu, otomatik olarak rebind yapmıyor, hala applyBindings çağırmanız gerekiyor. Bu sadece buna izin veriyor. Anlayışımın 'şablonundan' bağımlar bu durumda çok daha iyi çalışır, ama benim kullanım durumum için bir seçenek değildir ... bu benim için işe yarıyor. –

+0

Son sürümüm otomatik olarak son kez güncellendi, iki kez bağlanmıyor ve daha iyi çalışıyor. Not KO'ları çift bağlamasın ve dynhtml bağlamasının değeri değiştiğinde, denetleyicileri zorla yeniden zorladığımız için, controlDescendantBindings değerini true olarak ayarlayın. –

+2

Matt, bu tamamen sarsıldı. Bana çok büyük miktarda iş kurtardı! – drudru