淘汰赛无法处理“foreach”的绑定

Posted

技术标签:

【中文标题】淘汰赛无法处理“foreach”的绑定【英文标题】:Knockout unable to process biding for 'foreach' 【发布时间】:2015-03-17 13:52:08 【问题描述】:

我是淘汰赛的新手。对于我的问题,我试图让每个项目都有一个按钮和文本区域。 textarea 将在页面加载时隐藏。如果我单击按钮,它将显示文本区域,或隐藏它(切换)。我实现了以下代码,但出现此错误:

Uncaught ReferenceError: Unable to process binding "foreach: function ()return projects”消息:无法处理绑定“可见: function ()return show " Message: show is not defined

查看模型:

function ProjectViewModel(proj) 
            //console.log(proj);
            var self = this;
            self.projects = ko.observableArray(proj);
            self.show = ko.observable(false);
            self.toggleTextArea = function () 
                self.show(!self.show());
            ;
        ;

html

                <!-- ko foreach: projects -->
            <div id="eachOppyProject" style="border-bottom: 1px solid #eee;">
            <table>
                <tbody>
                    <tr>
                        <td><a data-bind="attr:  href: '/tools/oppy/' + guid " style="font-size: 25px;"><span class="link" data-bind="    value: guid, text: name"></span></a></td>
                    </tr>
                    <tr data-bind="text: projectDescription"></tr>
<%--                    <tr data-bind="text: guid"></tr>--%>
                </tbody>
            </table>
                 <span class="forminputtitle">Have you done project this before?</span>  <input type="button" value="Yes" data-bind="click: $parent.toggleTextArea" class="btnOppy"/>
                <textarea placeholder="Tell us a little of what you've done." data-bind="visible: show, attr: 'id': guid " class="form-control newSessionAnalyst" style="height:75px; " /><br />
                <span> <input type="checkbox" name="oppyDoProjectAgain" style="padding-top:10px; padding-right:20px;">I'm thinking about doing this again. </span>
            <br />
                </div><br />
                <!-- /ko -->

【问题讨论】:

【参考方案1】:

你得到的错误的重要部分是:

消息:显示未定义

这发生在你打电话的地方:

data-bind="visible: show ... "

发生这种情况是因为 Knockout 试图在您的 projects 对象中查找名为 show 的变量,但由于 showprojects 都是 ProjectViewModel 的子对象,所以它没有找到。

要引用show,您可以改用$parent.show

data-bind="visible: $parent.show ... "

【讨论】:

我将$parent 添加到toggleTextArea,但没想到将其添加到show。谢谢。这现在引入了一个新问题:当我单击显示文本区域的按钮时,它会显示页面上的所有文本区域,而不仅仅是相应的文本区域。有没有办法将唯一标识符链接到切换,以便显示正确的文本区域?

以上是关于淘汰赛无法处理“foreach”的绑定的主要内容,如果未能解决你的问题,请参考以下文章

如何在淘汰赛 foreach 绑定中使用表单

淘汰赛foreach绑定不起作用

带有按钮的表格上的敲除映射和 foreach 数据绑定,缺少对视图模型的引用?

无法绑定淘汰的$ parent

checkbox knockout点击绑定无法正常工作

如何将项目从淘汰赛 foreach 传递到部分视图作为数据绑定?