1

我有一个JSFiddle,尽管我似乎遇到了问题。在 viewModel.showDetails 中,我似乎无法调用 getter 函数来返回模型值。我在本地没有这个问题。

然而,我真正想要做和解决的问题是只呈现在“结果”面板顶部的列表中单击的单个药物的表格行。现在,它正在渲染所有药物,而我只希望它列出您单击的药物。

我已经包含了我正在处理的从服务器返回的数据。这是 JavaScript 面板顶部的数据对象。

然后我为每条记录添加一个“showModal”属性。它设置为假。理论上,这是我决定在表格中渲染这个模型对象的标志,即我们只想显示这个单独的模型对象,而不是全部。

表格的可见性与“showDetails”相关联,该“showDetails”在单个模型对象(从上面的列表中单击的药物)上切换 showModal 属性。这就是我在小提琴中遇到吸气剂错误的地方。

任何人都知道如何限制我在表格中的渲染?这是我在本地获得的一个非常减少的情况,我不确定为什么我不能如上所述调用 obj.showModal() 来检索值,但希望这能让您了解我在做什么.

4

1 回答 1

0

已修复: http: //jsfiddle.net/JpJQE/7/注意:knockout.mapping.js 可能无法在此 jsFiddle 中加载。由于某种原因,我的计算机拒绝连接到 raw.github.com。您可以替换托管资源带有工作链接)

你走在正确的轨道上,但有点过于复杂了。您不需要为数组中的每个项目添加新属性。您只需要跟踪要显示的项目。前任:

var viewModel = ko.mapping.fromJS(data);
viewModel.visibleDrug = ko.observable();
viewModel.showDetails = function(drug)
{
    viewModel.visibleDrug(drug.pdlId);
}

ko.applyBindings(viewModel);

此外,如果您visible在与您的 相同的绑定中使用 a foreach,那么您的visible绑定将在父级别而不是项目级别的范围内。因此,这将显示或隐藏所有药物。要区分数组的项目,您需要将visible绑定放在foreach循环中。前任:

    <tbody data-bind="foreach: preferredDrugs"> 
        <!-- ko if: $root.visibleDrug() == pdlId -->
            ... repeating content ...
        <!-- /ko -->
    </tbody>

​</p>

于 2012-09-04T20:42:40.377 回答