2016-04-08 24 views
0

Ben ile VM var şu: Benim GörünümündeObservableArray() öğesini ekleyin ve eklenene kadar bekleyin?

var myArray = ko.observableArray(), 
.... 
addItem = function(data) { 
    myArray.unshift(data); 
}, 

ben buna bağlanan bazı HTML vardır:

<div data-bind="foreach: myArray"> 
    ....<label data-bind:="attr: { id: 'myLabel_' + name }"></Label> 
    </div> 

Her şey harika çalışıyor - Ben addItem çağırdığınızda bir öğe eklendiğinde alır işlev obserableArray() ve Nakavt benim uygun HTML'yi ekler.

Şu anda karşı karşıya olduğum sorun şu ki, sadece düz HTML kullanmak yerine, daha karmaşık bir denetim kullanmayı deniyorum (Kendo ızgarası gibi). NewItem'i çağırdığımda Izgarayı başlatmak için bir Javascript yöntemini çağırmam gerekiyor. Ama eğer bunu yaparsam, işe yaramıyor (Sanırım Knockout'un ne yapması gerektiğini bitirmesi, Kendo kontrolünün yapması gerekeni yapması gerektiğinde).

şu çalışmaz:

var myArray = ko.observableArray(), 
.... 
addItem = function(data) { 
    myArray.unshift(data); 
    var test = $('#myLabel_nameOne'); 
    // Kendo specific code to setup test 
}, 

ben konsoldan aynı Kendo özel kodu çalıştırırsanız - bu iyi çalışıyor. SetInterval kullanırsam, bu da işe yarayacak.

Tüm şablona bağlanabileceğim bir 'afterRender' olduğunu biliyorum - ancak yalnızca UI'nin bu gözlemlenebilir Diziye tek bir öğe ekledikten sonra ne zaman yapıldığını bilmek istiyorum.

'Bu gerçekten eklenene kadar bekle, sonra git diğer şeyler mi?' Demenin doğru yolu nedir? Veya 'Bunu ekle, ve UI hazır olduğunda, bu işlevi benim için ara' '?

+0

var myArray = ko.observableArray() myArray.subscribe(function(data) { var test = $('#myLabel' + data.name); // Kendo specific code to setup test }); .... addItem = function(data) { myArray.unshift(data); },

XY-sorun var. Asıl sorun şu ki pek yardımcı olamıyoruz çünkü biraz fazla basitleştirdiniz (bunun için bir reproya ihtiyacımız var), ve sorabileceğiniz soru daha fazla bağlam olmadan gerçekten belirsizdir. – Jeroen

+0

Her şey [docs ...] (http://knockoutjs.com/documentation/foreach-binding.html#note-7-post-processing-or-animating-the-generated-dom-elements) – Tyblitz

cevap

1

Knockout dışındaki çerçevelerle eşzamanlı olmayan sorunları vurdum ve genellikle jQuery ve Deferred() nesnesiyle sarmalayıcıları yazarak bunları çözdüm.

Nakavt belgelerini okuduktan sonra sadece abone fonksiyonunu kullanabilirsiniz. Sizin gibi hissediyor

+0

Teşekkürler öneri için. İşin tuhafı, bu özellik Chrome ve Firefox'ta harika çalışıyor ancak IE'de çalışmıyor. Sorumu, sorunumu yeniden üreten kod içerecek şekilde güncelleyeceğim. –

+0

Hmmm biraz garip görünüyor. Bir sırasını değiştirmeden hemen sonra bir konsol hata ayıklama ve yürütme sırasını kontrol etmek için aboneliğinizin ikincisini ekleyin. – BlueWater86

İlgili konular