2014-09-04 69 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),否则您的结果看起来很奇怪。

*如果您编辑的问题,包括相关的(最好是格式正确)的代码,所以这个问题可以给别人留有用类似的问题它会是不错的。