0

我正在使用淘汰赛绑定创建链接列表:

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);

}

(编辑: initko.observable缺少一个 Id (即使这没有导致错误,添加它)

这是如何工作的,视图模型将加载一堆没有父项(id 0)的项目。为了简单起见,我只包括了左侧版本。但是该页面的左侧和右侧都有一个项目列表,因此每个项目都有一个功能。

左侧项目被填充以查看模型左侧项目并显示如下。但是每个项目都是一个链接,一旦通过 javascript 单击将根据父 ID 刷新项目。(很像在资源管理器中浏览文件夹查看器)。

但我不知道如何在淘汰赛中声明绑定以建立 url。我知道这可能非常容易,我只是想念它。

这是我尝试过的html

<div class="leftView">
    <div data-bind="foreach: leftItems">
        <a data-bind="text: Name, attr : { href:'javascript:getLeftChildren(' + Id + ')' }"></a><br />
    </div>
</div>

(编辑:错过了一个单引号,但还是得到了同样的错误)但我不断收到一个绑定错误

4

1 回答 1

2

有几件事:

1) leftItems 理想情况下应该是一个 observableArray

2) 您推入 leftItems 的初始对象没有 Id 属性

这是一个 JSfiddle,它纠正了一些事情并演示了加载一组初始数据,然后再次调用以加载不同的数据。我还在 viewModel 中移动了外部 JavaScript 调用,并切换到使用单击处理程序来传递刷新数据(请注意,单击绑定会自动将数据项作为第一个参数发送到事件处理程序中,因此您可以访问创建 URL 所需的 id)。

http://jsfiddle.net/jearles/xTHFg/

于 2012-04-14T12:21:57.307 回答