使用 KNOCKOUTJS 设置动态可观察量

setting dynamic observables with knockoutjs

本文关键字:观察 动态 KNOCKOUTJS 设置 使用      更新时间:2023-09-26

我正在尝试执行以下操作:

var viewModel = function() {
    var self = this;
    $.getJSON("/categories", function(data) {
        $.each(data, function(index, cat) {
            self[cat] = ko.observable(true);
        });
    });
}

传入的数据是类别名称的 JSON 数组 - 我已经在我的控制台日志中确认这些名称很好。

但是,在我的模板中,当我使用visible: viewModel[catname]数据绑定时,没有任何反应。不过没有收到任何错误。有什么想法吗?

--

注意:

实际模板(轨道3):

<% @categories.each do |category| %> 
<div data-bind="visible: viewModel[<%=category.name%>]">
<%= category.name %>
</div> 
<% end %>

您的绑定应该只是visible: catname。所有绑定都已经在viewModel内"作用域",因此您无需在绑定中引用它。

在这里查看我的工作示例:http://jsfiddle.net/WpdMZ/。请注意,bananapear 设置为 true ,因此它们对应的正方形是可见的,但apple明确设置为 false ,因此其正方形不可见。


根据您的更新,您应该能够更改此行:

<div data-bind="visible: viewModel[<%=category.name%>]">

对此:

<div data-bind="visible: <%=category.name%>">

Jackie 是正确的,但你真的应该考虑一种更一致的方法。如果数据传入,请将其放置在挖空模型中,并使用挖空模板。下面是演示此方法的小提琴: http://jsfiddle.net/tyrsius/W6SXU/3/