2013-08-12 2 views
5

knockout.js를 사용하여 자식 개체에서 부모 개체의 특정 필드를 가져 오는 데 어려움이 있습니다.
Knockoutjs 부모 개체 얻기

function Child(info){ 
    var self = this; 
    self.x = info.x; 
    self.y = info.y; 
    self.parentThing = parent.fieldToGet(); // This is when I had problem 
} 

function Main() { 
    var self = this; 
    self.fieldToGet = ko.observable(); 
      self.things = ko.observableArray(); 
    self.postFunction = function(){ 
     $.post('XXX.php', $("form#filterForm").serialize(), function(data){ 
       var mappedThing = $.map(data.data, function(info){return new Child(info); }); 
       self.things(mappedThing); 
      } 
     }, 'json'); 
    }; 
} 
var main = new Main(); 
ko.applyBindings(main, $("div#main")[0]); 



hierachy 메인 여러 자식을 가지고있다. Child 객체에서 나는 부모 속성을 얻고 싶습니다 : fieldToGet.

+4

패스'Main'에서 자식 클래스에 매개 변수로 전달됩니다)를 'Child'의 생성자에 연결하십시오. –

+0

이 예제의 문제점은 무엇입니까? –

+0

@PWKad 문제는 내 예제가 실제로 작동하지 않습니다. – riceTale

답변

4

좋은 해결책은 부모 클래스를 매개 변수으로 자식에게 전달하는 것입니다. 당신이 내 예제에서 부모 인스턴스 (self)을 볼 수 있듯이

function Child(info, parent){ 
    var self = this; 
    self.parent = parent; 
    self.x = info.x; 
    self.y = info.y; 
    self.parentThing = parent.fieldToGet(); // This is when I had problem 
} 


function Main() { 
    var self = this; 
    self.fieldToGet = ko.observable(); 
    self.things = ko.observableArray(); 
    self.postFunction = function() 
    { 
     $.post('XXX.php', $("form#filterForm").serialize(), function(data) { 
       var mappedThing = $.map(data.data, function(info) { 
       return new Child(info, self);   
       }); 
       self.things(mappedThing); 
     }, 'json'); 
    }; 
} 
    var main = new Main(); 
    ko.applyBindings(main, $("div#main")[0]); 

은 self``로 (매개 변수로 생성자 (function Child(info, parent))

+0

먼저 내 질문에 답해 주셔서 감사합니다. 내가 언급했듯이 나는 전에이 문제를 만났고 당신이 여기서 한 것과 같은 문제를 해결했다. 그렇다면 데이터 바인딩에서 부모 필드를 구조적으로 얻을 수 없다는 뜻입니까? 예 : $ parent.parentThing() – riceTale