我从其他人的代码开始研究这个问题。所以数据集被填满了。我的工作是添加基于数据库值在Load上扩展节点的功能。我花了一段时间,当我完全不认为我愿意时,这个Jquery工作了。
onPostInit: function(isReloading, isError) {
$("#test-div").dynatree('getRoot').visit(function(node){
if (node.data.IsExpandable === true) {
node.expand(true);
}
});
IsExpandable表示我的数据库中的bool db列。我不认为Jquery能够接受那个领域,但确实如此。我知道控制器代码使它成为可能。谁能帮忙解释一下原因?因为现在我对AsEnumerable()正在做什么以及r.Field的作用有点不确定。这是控制器
//Here Ds equals a filled dataset //TreeData is model class w/ these properties
var myData = Ds.Tables[0].AsEnumerable().Select(r => new TreeData
{
title = r.Field<string>("Name"),
key = r.Field<int>("CategoryId"),
ParentID = r.Field<int?>("ParentId"),
IsExpandable = r.Field<bool?>("IsExpandable"),
icon = false,
addClass = "custom1"
});
答案 0 :(得分:0)
可以通过许多不同的方式初始化dynatree树。其中一些要求您提供一个javascript对象树(请参阅section 4.2 of the online documentation)。在您的示例中,title,key,icon和addClass属性是dynatree插件用于呈现节点的标准属性。 ParentID和IsExpandable属性是您的某个开发人员添加到对象以添加自定义行为的自定义属性。
AsEnumerable是一种DataTable扩展方法,允许您对DataTable中的行使用LINQ查询。 Field是一种DataRow方法,可让您访问行中的字段。
所以在第二个片段中发生的是,为数据表中的每一行创建了所有dynatree节点对象。