2017-04-17 7 views
0

この特定のページで$ rootを使用してメソッドにアクセスすることはできません。このコードは他のページでも動作しますが、わかりません。 1ページに1つのビューモデルがあります。 removeAttachmentが見つかりません。ノックアウトjsルートバインド

knockout-3.4.0.js:72 Uncaught TypeError:バインドを処理できません "click:function(){return $ data.bind.removeAttachment($ data、event、$ index)}" メッセージ:読み取りできません

click: $root.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

のプロパティ 'removeAttachment'

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

関数に渡される最初と2番目のパラメータは、常に$dataeventです。 bindを使用すると、それらを押し戻して新しい最初のパラメータを渡すことができます(また、thisの値を設定することもできます)。

また、removeAttachmentが実際にビューモデルに設定されていることを確認する必要があります。このしようと

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

は$ root.removeAttachmentと一緒に動作しません – Hardrock302

+0

私は自分の答えを拡張しました。 –

関連する問題