如何从父视图模型访问grandchild viewmodel?
问题描述:
在我的webapp中,我创建了三个视图模型,它们像第一个viewmodel一样嵌套,是第二个父视图,第二个是第三个父视图。现在,如果我想显示第三个视图模型的值,它给我错误,它不是定义。在我的代码LoanRateViewModel
是父母的子女是Term
和Tier
是Term
的子女。如何从父视图模型访问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?
答
不幸的是,问题不在于您发布的代码*,而是在小提琴中。
你想要的肯定是可能的,虽然正如你在评论中提到的那样,你需要适当的嵌套才能接触到大孩子,因为他们总是会在某个父母的背景下(Term
)。 I've (mostly) fixed your jsfiddle,解决问题,直到没有错误。有些东西会回答你的“问题”是:
- 确保正确关闭DOM元素(例如
table
和tbody
); - 请确保您参考
$root
以了解位于根上的方法(例如addTier
); - 在表中,确保每行有相同的单元格数(或使用
colspan
),否则您的结果看起来很奇怪。
*如果您编辑的问题,包括相关的(最好是格式正确)的代码,所以这个问题可以给别人留有用类似的问题它会是不错的。
你不能跳过这样的级别 - 你怎么知道要显示哪个孙子?你必须知道它是家长。因此,请尝试使用以下内容:'LoanRateViewModel.Terms()[i] .Tiers()'其中'i'是'Tier's'父项的索引。 – 2014-09-04 12:34:50
您可以使用计算来枚举所有条款来构建所有层的数组。即使你这样做了,你也会遇到'Add Fields'的问题。你有哪些术语? – 2014-09-04 22:17:27
如果通过ui调用访问它,则可以传入事件并使用ko.contextFor(element),并且在该模型中可以访问其父项等等。 – segFault 2014-09-04 23:48:05