我有一个加载“子”实体的 ViewModel,我还想根据加载的每个子实体显示“孙子”实体。为了简化事情,我需要帮助确定如何查询这些对象并将它们显示在浏览器中适当的“树”下(为我对编码语言的屠杀表示歉意:))
我正在使用 Knockout 绑定数据并使用 Breeze 加载实体。这个问题是何时向 Breeze 实体添加扩展其他复杂类型的扩展
另外 - 我的模型首先是 EF 代码,我有一个配置定义了子孙之间的一对多关系,我认为Breeze 已经知道这一点,但我正试图弄清楚如何利用这一点。
childs.js(查看模型)
var childs = ko.observableArray();
var grandChilds = ko.observableArray();
var parentId = ko.observable();
function refresh() {
var parentId = (parent).parentId; // << for ex. don't worry about this line : )
return Q.all([getChildren(), getGrandChildren()]);
}
function getChildren() {
return datacontext.getChildren(childs, parentId);
}
function getGrandChildren() {
return datacontext.getGrandChildren(grandChilds);
}
并在视图中(childs.html)
<div data-bind="foreach: childs">
<div title="Go to Child Details">
<div><strong data-bind="text: name"></strong></div>
<div><strong data-bind="text: gender().description"></strong></div>
</div>
<div>
<!-- ko.compose { view: grandChilds} --><!--/ko-->
</div>
</div>
和我当前的数据上下文供参考
var getChilds= function (childsObservable, parentId) {
var query = EntityQuery.from('Childs')
.where('parentId', '==', parentId)
.expand('grandChildren')
.orderBy('id');
return manager.executeQuery(query)
.then(querySucceeded)
.fail(queryFailed);
function querySucceeded(data) {
if (childsObservable) {
childsObservable(data.results);
}
logger.log('Retrieved [Childs] and [Grandchilds] from remote data source', data, system.getModuleId(datacontext), true);
}
};
我只想加载孩子的孙子,因为有很多孩子,我只想在正确的孩子下显示孙子,而不是在一个列表中显示所有孙子。任何帮助,将不胜感激。