2014-09-04 3 views
0

В моем webapp я создаю три модели, которые вложены, как первая viewmodel, является родительским элементом второго, второй является родительским элементом третьего. теперь, если я хочу отобразить значение третьей модели представления, она дает мне ошибку, которую она не определяет. В моем коде LoanRateViewModel является родителем, чей ребенок Term и Tier является дочерним по отношению к Term.Как получить доступ к модели просмотра grandchild с родительской модели?

function Tier(data){ 
    var self = this; 
    self.tierValue = ko.observable(data.tierValue || ""); 
    self.rate = ko.observable(data.rate || "121212"); 
    self.simplerate = ko.observable(data.simplerate || "121212"); 
    self.compoundrate = ko.observable(data.compoundrate || "12212"); 
    } 

function Term(data) { 
    var self = this; 
    self.Tiers = ko.observableArray([]); 
    self.loanterm = ko.observable(data.loanterm || "12"); 
    self.termIdentifier = ko.observable(data.termIdentifier || "12"); 
}; 

здесь jsfiddle ссылка DEMO

Как я могу назвать внук возможно через нокаута JS?

+0

Вы не можете пропустить уровни точно так же - как вы знаете, какой внук показывать? Вы должны знать, что это родитель. Поэтому попробуйте использовать что-то вроде: 'LoanRateViewModel.Terms() [i] .Tiers()' где 'i' - индекс родителя' Tier's'. –

+0

Вы можете использовать вычисление для построения массива всех уровней путем перечисления всех Условий. Даже если вы это сделали, у вас возникла проблема с 'Add Fields'. В каком сроке у вас есть уровень? –

+0

Если к нему обращаются через ui-вызов, вы можете передать событие и использовать элемент ko.contextFor (element), и в этой модели у вас есть доступ к его родительскому объекту и так далее. – segFault

ответ

0

Проблема, к сожалению, не в коде, который вы отправили *, а в скрипке.

То, что вы хотите, конечно, возможно, хотя, как упоминалось в комментариях, вам нужно правильное гнездование, чтобы достичь внуков большого размера, потому что они всегда будут в контексте определенного родителя (Term). I've (mostly) fixed your jsfiddle, устраняя проблемы до тех пор, пока не осталось ошибок. Некоторые вещи, которые бы ответить на ваш «вопрос» являются:

  • Убедитесь, что вы правильно близко DOM элементы (например table и tbody);
  • Удостоверьтесь, что вы ссылаетесь на $root на методы, которые находятся на корне (например, addTier);
  • В таблицах убедитесь, что каждая строка имеет равное количество ячеек (или используйте colspan), или ваши результаты будут выглядеть странно.

* Было бы неплохо, если бы вы изменить свой вопрос, и включал в себя соответствующие (желательно хорошо отформатированный) код, поэтому вопрос может оставаться полезным для других с подобной проблемой.

Смежные вопросы