Knockout TypeError:m.apply不是函数

时间:2015-08-12 05:25:23

标签: javascript jquery knockout.js

以下是包含折叠面板的表格的代码。 click事件处理程序抛出“m.apply不是函数”的错误消息。

Quux.CollapseExpandCustom.ToggleSection('+id+')是接受动态ID的函数。

请让我知道我犯的错误。我需要绑定代码中提到的click事件。

<table id="EditFooList">
    <thead>
        <tr>
            <th>User</th>
            <th>Started Date</th>
            <th>Foo</th>
            <th>Action</th>
        </tr>
    </thead>
    <tbody data-bind="foreach: EditedDataArray">
        <tr>
            <td data-bind="text: $data.UserName"></td>
            <td data-bind="text: $data.TimeStampString"></td>
            <td>
                <div>
                    <p data-bind="text: $data.Title, click: $root+'.'+'Quux.CollapseExpandCustom.ToggleSection('+$data.Baz+')'">Foos<img src="~/Images/Collapse.png" /></p>
                    <div>
                        <div data-bind="attr:{id: $data.Baz}">
                            <ul data-bind="foreach: $data.FooDetailViewModels">
                                <li>
                                    <input type="button" data-bind="value: 'Resume -   ' + $data.TimeDate,click: $root.ClickResume , attr:{fooStudyId:$data.FooStudyId}" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                                    <input type="button" data-bind="value: 'Plan -   ' +$data.TimeDate, click: $root.ClickPlan , attr:{fooStudyId:$data.FooStudyId}" />
                                </li>
                            </ul>
                        </div>
                    </div>
                </div>
            </td>
            <td>
                <input type="button"value="New" data-bind="attr:{id: $data.Baz} , click: $root.FooCLick"/>
            </td>
        </tr>
    </tbody>
</table>

2 个答案:

答案 0 :(得分:7)

这个答案可能有所帮助:Knockout click binding strange behavior

基本上,如果你将它包装在一个匿名函数中,它应该停止错误:

<p data-bind="text: $data.Title, click: function() { $root.Quux.CollapseExpandCustom.ToggleSection($data.Baz); }">Foos<img src="~/Images/Collapse.png" /></p>

然而,正如@Nathan Fisher所提到的,你可能最好在viewmodel中创建一个处理这个过程的函数。

另外,我不确定你为什么要通过调用函数来构建字符串。即

click: $root.Quux.CollapseExpandCustom.ToggleSection($data.Baz)

而不是

click: $root+'.'+'Quux.CollapseExpandCustom.ToggleSection('+$data.Baz+')'

答案 1 :(得分:0)

由于您似乎正在使用某个函数,我假设您可能有一个与函数同名的变量($ scope.variable),在这种情况下它会覆盖范围内已存在的函数。