我创建的使用淘汰赛结合的链接列表的字符串:Knockout.js我该如何建立有约束力的
的Javascript和视图模型看起来是这样的:
$(function() {
var adminViewModel = function()
{
var self = this;
self.leftItems = ko.observable([ { Name: "Item1", Id: 0 }]);
self.getChildren = function (id, list) {
var url ="@Url.Content("~/api/Test/GetChildren/")" + id;
$.getJSON(url, function (data) {
list(data);
});
};
}
var Admin3App = window.Admin3App = window.Admin3App || {};
Admin3App.viewModel = new adminViewModel();
ko.applyBindings(Admin3App.viewModel);
function getLeftChildren(id)
{
Admin3App.viewModel.getChildren(id, Admin3App.viewModel.leftItems);
}
getLeftChildren(0);
}
(EDIT :ko.observable
的init缺少一个Id(尽管这不会导致错误,但添加了它)
这是如何工作的,视图模型将加载一堆没有父项(ID为0)的项目 为了简单起见,我只包含了左边的版本,但是该页面的左侧和右侧有一个项目列表,因此每个项目都有一个功能。
左边的项目被填充以查看模型左边的项目并显示如下。但每个项目都是一个链接,一旦通过javascript点击将刷新基于父Id的项目。 (就像在浏览器中浏览文件夹查看器一样)。
但我无法弄清楚如何在knockout中声明绑定来建立url。我知道这可能很容易,我只是想念它。
下面是HTML我试图在其他之中
<div class="leftView">
<div data-bind="foreach: leftItems">
<a data-bind="text: Name, attr : { href:'javascript:getLeftChildren(' + Id + ')' }"></a><br />
</div>
</div>
(编辑:错过了一个单引号,但得到了同样的错误反正) 但我不断收到一个绑定错误
我建议重构你的代码:添加“getLeftChildren”向视图模型(因为它提供了相关的视图功能,它属于那里),并使用“点击”绑定。 – Niko 2012-04-14 10:10:53
你的ID来自哪里(用于数据绑定表达式)? – Hans 2012-04-14 12:07:30
对于我添加的对象,它缺少Id,但我的运行代码没有在数组的初始化中的任何项目,但我从Json返回的对象有Id,即时更正问题 – Andre 2012-04-14 12:36:29