2014-09-04 80 views
0

在我的webapp中,我創建了三個視圖模型,它們像第一個viewmodel一樣嵌套,是第二個父視圖,第二個是第三個父視圖。現在,如果我想顯示第三個視圖模型的值,它給我錯誤,它不是定義。在我的代碼LoanRateViewModel是父母的子女是TermTierTerm的子女。如何從父視圖模型訪問grandchild viewmodel?

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'父項的索引。 – 2014-09-04 12:34:50

+0

您可以使用計算來枚舉所有條款來構建所有層的數組。即使你這樣做了,你也會遇到'Add Fields'的問題。你有哪些術語? – 2014-09-04 22:17:27

+0

如果通過ui調用訪問它,則可以傳入事件並使用ko.contextFor(element),並且在該模型中可以訪問其父項等等。 – segFault 2014-09-04 23:48:05

回答

0

不幸的是,問題不在於您發佈的代碼*,而是在小提琴中。

你想要的肯定是可能的,雖然正如你在評論中提到的那樣,你需要適當的嵌套才能接觸到大孩子,因爲他們總是會在某個父母的背景下(Term)。 I've (mostly) fixed your jsfiddle,解決問題,直到沒有錯誤。有些東西會回答你的「問題」是:

  • 確保正確關閉DOM元素(例如tabletbody);
  • 請確保您參考$root以瞭解位於根上的方法(例如addTier);
  • 在表中,確保每行有相同的單元格數(或使用colspan),否則您的結果看起來很奇怪。

*如果您編輯的問題,包括相關的(最好是格式正確)的代碼,所以這個問題可以給別人留有用類似的問題它會是不錯的。

相關問題