javascript - Knockout.js 如何从绑定(bind)构建字符串

标签 javascript knockout.js

我正在使用 knockout 绑定(bind)创建链接列表:

Javascript 和 View 模型如下所示:

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

}

(编辑:ko.observable 的 init 缺少 Id(即使这没有导致错误,但添加了它)

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

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

但我不知道如何在 knockout 中声明绑定(bind)来构建 URL。我知道这可能非常简单,但我只是想念它。

这是我尝试过的 html

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

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

最佳答案

有几件事:

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

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

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

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

关于javascript - Knockout.js 如何从绑定(bind)构建字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10152529/

相关文章:

mvvm - knockout viewModel中的数据未显示

knockout.js - 剑道 knockout : use knockout view model with kendo datasource

jquery - 在选定的索引更改时调用函数

javascript - Knockout.js View 模型发生更改,但已发布网站上的复选标记没有更改

javascript - 单击显示隐藏的 Div

javascript - AngularJs中字符串首字母大写

javascript - setTimeout 在动画运行之前不起作用

javascript在确认时更改按钮值

javascript - 如何设置永久禁用/启用 Chrome 扩展样式表的选项?

javascript - 使用knockout js view.items()的for循环