【发布时间】:2014-12-08 20:56:13
【问题描述】:
我有这样的树:
<script src="~/Scripts/tree.js"></script>
<script type="text/html" id="tree-node">
<li>
<span data-bind="text: Name"></span>
<div>
<ul data-bind="template: {name: 'tree-node', foreach: Children}"></ul>
</div>
</li>
</script>
<ul data-bind="template: {name: 'tree-node', foreach: tree}"></ul>
视图模型:
var ViewModel = function () {
var self = this;
self.tree = ko.observableArray([]);
self.getTree = function() {
$.get('/api/tree', 'json', function(data) {
self.tree(data);
});
}.bind(self);
};
var vm = new ViewModel();
vm.getTree();
ko.applyBindings(vm);
API:
public List<Objects> Get()
{
ctx.Configuration.LazyLoadingEnabled = false;
ctx.Configuration.ProxyCreationEnabled = false;
return ctx.Objects.ToList().Where(z=>z.Parent==null).ToList();
}
对象包含必须绑定到树的子对象:
public class Objects
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
[Required]
public string Name { get; set; }
public string Details { get; set; }
public virtual Objects Parent { get; set; }
public virtual ICollection<Objects> Children { get; set; }
}
最后我什么也得不到。 我在 Knockoutjs 上下文调试器中查看视图模型,然后我看到了我的数据。但它不会在页面上呈现。为什么?
【问题讨论】:
-
控制台有错误吗? /api/tree 回调中
data的值是多少? -
您必须在声明
var self=this时在 vm 中的任何地方使用 self 并使用类似self.A=function(){//code}.bind(self)的东西,其中内部 self 代表 root observable -
数据为 [[object Object]]。控制台中没有错误。
-
把这个改成self,没有效果
标签: knockout.js asp.net-web-api