Knockout js root绑定

时间:2017-04-17 22:23:00

标签: knockout.js

我无法在此特定页面上使用$ root访问方法。此代码适用于我的其他页面,但我不明白。我每页有一个viewmodel。它找不到removeAttachment。

knockout-3.4.0.js:72 Uncaught TypeError:无法处理绑定" click:function(){return $ data.bind.removeAttachment($ data,event,$ index)}" 消息:无法读取属性' removeAttachment'未定义的

var model = function AppViewModel(){
self.removeAttachment = function(data, event, attachmentClicked){
    fileNameToDelete = attachmentClicked;
    $("deleteText").append(" " + attachmentClicked + "?");
     $('#delete-confirm').modal('show'); 
};
};
 var app = new model();
ko.applyBindings(app, document.getElementById("panel"));
 <div id="panel">

<tbody class="types">
<!-- ko foreach: multiFileData().fileArray -->
<tr>
<td><span class="attachName" data-bind="text:name"></span></td>
<td><span class="attachName" data-bind="$parent.sizeInMB: size"></span></td>
<td id="remove" class="glyphicon glyphicon-trash" data-toggle="modal" data-target="delete-confirm" 
data-bind="click:$root.bind.removeAttachment($data, event, $index)"> </td>
</tr>
<!-- /ko -->
</tbody>
</div>

1 个答案:

答案 0 :(得分:1)

你可能想要:

click: $root.removeAttachment

如果您需要传递额外的参数:

click: $root.removeAttachment.bind($root, $index)

传递给函数的第一个和第二个参数将始终为$dataevent。使用bind,您可以将它们推回并传入新的第一个参数(以及设置this值)。

此外,您还需要确保在视图模型中实际设置了removeAttachment

var model = function AppViewModel() {
    var self = this;
    self.removeAttachment = ...
};