Javascript 每个绑定的敲除器不工作

Javascript 每个绑定的敲除器不工作,javascript,knockout.js,durandal,Javascript,Knockout.js,Durandal,我正在关注John Papa关于SPA的jumpstart课程,并试图显示通过ASP.NET Web API加载的客户列表。敲除foreach绑定不起作用。WebAPI运行良好,我已经在它自己的平台上进行了测试,它返回了正确的JSON,因此我不会发布它的代码。get方法只返回一个对象数组,每个对象都有属性Name和Email。虽然不是一个好的实践,但通过在durandal之前加载敲除,敲除在全球范围内暴露为ko 我将customers.js视图模型编码如下 define(['services/d

我正在关注John Papa关于SPA的jumpstart课程,并试图显示通过ASP.NET Web API加载的客户列表。敲除foreach绑定不起作用。WebAPI运行良好,我已经在它自己的平台上进行了测试,它返回了正确的JSON,因此我不会发布它的代码。get方法只返回一个对象数组,每个对象都有属性Name和Email。虽然不是一个好的实践,但通过在durandal之前加载敲除,敲除在全球范围内暴露为
ko

我将customers.js视图模型编码如下

define(['services/dataservice'], function(ds) {
     var initialized = false;

     var customers = ko.observableArray();

     var refresh = function() {
         return dataservice.getCustomers(customers);
     };

     var activate = function() {
          if (initialized) return;
          initialized = true;
          return refresh();
     };

     var customersVM = {
          customers: customers,
          activate: activate,
          refresh: refresh
     };

     return customersVM;
});
我编码的dataservice模块如下(我没有在函数
queryFailed
下面编写,因为我知道它没有被使用)

最后,模型模块构建如下:

define(function () {

    var Customer = function (dto) {
        return mapToObservable(dto);
    };

    var model = {
        Customer: Customer
    };

    return model;

    function mapToObservable(dto) {
        var mapped = {};
        for (prop in dto)
        {
            if (dto.hasOwnProperty(prop))
            {
                mapped[prop] = ko.observable(dto[prop]);
            }
        }

        return mapped;
    }
});
视图就是一个列表,它就是:

<ul data-bind="foreach: customers">
    <li data-bind="text: Name"></li>
</ul>

但这不起作用。任何其他绑定都可以工作,我已经查看了控制台窗口,似乎可以正确填充可观察数组。唯一的问题是这段代码没有在屏幕上显示任何内容。我已经检查了很多次这些文件,但似乎找不到问题所在。这有什么问题?

我在你的代码中没有看到你在ViewModel上调用的
ko.applyBindings

你可以使用knockout.js上下文调试器chrome扩展来帮你调试问题


我知道这个问题有点老了,但我想我会添加我的回答,以防其他人遇到与我相同的问题

我使用的是Knockout JS 2.1.0版,似乎我能在foreach循环中显示数据的唯一方法是使用:

$data.property 
所以在你的例子中是

$data.Name

希望这有帮助

KO在非容器元素(如上面的
中使用foreach)中存在已知问题,因此必须使用无容器控制流语法

e、 g


Ref:

好吧,我只是在一个本地问题上花了很多时间才意识到,如果使用ko HTML注释格式,应该是这样的:

<!-- ko foreach: arrecadacoes -->
<!-- ko: foreach: arrecadacoes -->

不是这样的:

<!-- ko foreach: arrecadacoes -->
<!-- ko: foreach: arrecadacoes -->


ko
之后不使用。…

区分大小写?您在上面说过属性是Name和Email,但您的绑定是text:Name。@Brad,我在这里写错了。我在我的代码中也写了错误的案例,但即使纠正了这一点,它仍然不起作用。你还有别的想法吗?谢谢你的帮助。你记得调用applyBindings吗?控制台中有什么错误吗?你选择了一个解决方案,但你没有提到出了什么问题。这是真的,但我正在使用Durandal,我听说Durandal会自动调用
ko.applyBindings
。事实上,其他绑定正在工作,只是
foreach
引起了麻烦。还有别的事吗?