2012-05-15 17 views
9

Bu yüzden, bağlantı etiketlerine bağlanmayan bir knockoutjs tıklama bağlaması ile gerçekten garip bir sorunum var. Diğer data-bind = "" ancak tıklama ciltleme değil. kullanıcı sayfasındaki bir bağlantıyı tıkladığında Aşağıdaknockoutjs tıklatma iç içe geçmiş foreach'da çalışmıyor bağla

Temel olarak kalıcı bir pop-up ve onun yüklü

var tag = function (data) { 
    this.count = data.Count; 
    this.id = data.Id; 
    this.title = data.Title; 
    this.tagGroup = data.TagGroup; 
}; 
var tagContainer = function (data) { 
    this.tagList = $.map(data.Tags, function (item) { return new tag(item); }); 
    this.letter = ko.observable(data.Letter); 
}; 

var searchViewModel = function(){ 
    var self = this; 

    self.tagContainerList = ko.observableArray([]); 

    self.addFilter = function (tag) { 
    //move tag to active filters and do some more cool stuff here 
    }; 


}; 

<div id="modal-all-tags" data-bind="with:searchViewModel"> 
    <ul data-bind="foreach:tagContainerList"> 
     <li> 
      <span data-bind="text:$data.letter()"></span> 
      <ul data-bind="foreach:tagList"> 
       <li><a href="#" data-bind="click:$root.addFilter"><span data-bind="text:title"></span></a></li> 

      </ul> 
     </li> 
    </ul> 

     <a class="close-reveal-modal">&#215;</a> 
</div> 

dosya ViewModel js HTML ve bir kısmını görebilirsiniz. Ben sunucuya bir istek gönderir ve bana her başlangıç ​​Harf ve etiketlerin bir listesi bu gibi harf altında işlenecek olan Etiket Konteynerler bir listesini verir: bir bir kelime 1 bir kelime 2 B b sözcüğü 1 b kelimesi 2 C c kelimesi 1 c kelimesi 2

vb ...

harfler doğru işlenir A, B, C ve her biri altlarındaki render doğru etiket listesini alır metin: başlık doğru şekilde gösteriliyor.

Her şey addFilter() dışında çalışır; Etiket listesindeki her bağlantıya bağlamak istediğim işlev. Tarayıcı sadece yukarı atlar ve url'ye bir karma karakter ekler. Firebug, bağlamalarda da herhangi bir hata göstermiyor.

Div konteynerinin sahip olmasının nedeni: searchViewModel, tüm sayfa için bir ana görünüm modelinin bulunmasıdır. Ancak bu, projenin diğer her sayfasında çalıştığı için önemli olmamalı.

Düşünebildiğim tek şey, $ root.addFilter bağlantısının tıklanmasının yanlış olduğunu, ancak firebug'ın "addFilter tanımlı değil" hatasını verdiği addFilter'i denedim.

Hem de $ parent ve $ root denedim.

Herhangi bir öneriniz var mı?

+3

gibi bir şeye benzedim. Bunu nasıl çözdüğünüzü açıklar mısınız? –

cevap

15

Ben bir düşünün. Sizin addFilter fonksiyon parametre (tag) bekler ama bağlayıcı içinde o şey geçmezken:

<a href="#" data-bind="click:$root.addFilter"> 

bu sorun olabilir mi?

Belki çizgisinde bir şey:

<a href="#" data-bind="click:function() { $root.addFilter($data) }"> 

yardımı olur?

+1

Ne yazık ki çalışmıyor $ parent.addFilter $ root aswell ile denenmiş bir işlev değildir. Ama bana bir fikir verdi, bazı şeyleri bu yaklaşımla deneyeceğim. – Kimpo

+0

Hâlâ şans yok, tıklamayı kullanıyorum: addFilter sayfanın diğer bölümlerinde arama filtrelerini ekleyebileceğiniz ve $ data genellikle bir gözlemlenebilir dizide yinelenen bir fonksiyon çağırıyorsanız gerekli değildir – Kimpo

+0

Duyduğuma üzüldüm söyledi. Bunu "Firebug, bağlayıcılar üzerinde herhangi bir hata göstermiyor" diyorsunuz."Bu, addFilter işlevinizin çağrıldığını ima eder, aksi halde bir hata ortaya çıkarılır. AddFilter işlevinde bir kesme noktası koymayı denediniz mi (Chrome'u hata ayıklama için çok iyi buluyorum) ve işlevin içinde sorun olup olmadığını görmeye başladım? etiket parametresinde neyin geçtiğini denetleyin ve sorunun ne olduğunu inceleyin. –

3

Benzer bir şeye rastladım ve ilk olarak data-bind="click:function() { console.log($parents) }"'u çalıştırdım. Not: $parents, $parent değil. Bağlamı bulmaya çalıştım ve ihtiyaç duyduğum tek şey, data-bind="click:$parents[1].onCardClick"

+0

Xerri çok uygun bir çözüm önerdi, tam olarak aynı durumda sıkışıp kaldım ve problemimi çözdüm. sadece yaptığım değişiklik parantezleri veri-bind = "tıklayın: $ ebeveynler [1] .onCardClick() koymaktı ve çekicilik olarak çalıştı. –

İlgili konular