2013-08-12 3 views
5

У меня возникают трудности с получением определенного поля родительского объекта из дочернего объекта с помощью knockout.js.
Knockoutjs get parent object

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]); 



Главная иерархия имеет несколько дочерних. В объекте Child я хочу получить атрибут его родителей: fieldToGet.

+4

Pass 'Main' в качестве параметра (как' self') к конструктору 'Child' –

+0

В чем проблема в этом примере? –

+0

@PWKad Проблема в том, что мой пример на самом деле не работает. – riceTale

ответ

4

Я думаю, что хорошим решением будет передать родительский класс ребенку в качестве параметра.

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