0

私は次のものを持っています:

HTML

<div id="documentsList" data-bind="foreach: documents">
   <span class="ui-icon ui-icon-document" data-bind="click: $root.onViewDocumentClick"></span>
</div>

ジャバスクリプト

documentViewModel = new function() {
   var self = this;
   self.documents = ko.observableArray([]); //Loaded elsewhere
   self.onViewDocumentClick = function(data) {
      var path = "/ViewDocument/0";
      var url = path.replace("/0","/" + data.Id.ToString());
      window.location = url;
   }
}

$(function() {
   $ko.applyBindings(documentViewModel,$("#documentsList")[0]);
  });

私の問題は、ドキュメントがロードされてアイコンをクリックすると、ページのリロードが発生しますが、ページが実際に /ViewDocument/undefined をリロードしようとしていることを示しています...もちろん、ページがそうでないためエラーが発生します存在。

Knockout ではなく jQuery を介してクリック イベントを処理するように次の変更を加えると、問題なく動作します。

HTML

<span class="ui-icon ui-icon-document" data-bind="text: Id"></span>

ジャバスクリプト

$("#documentsList").on("click","span.ui-icon-document",function() {
      var path = "/ViewDocument/0";
      var url = path.replace("/0","/" + $(this).text());
      window.location = url;
});

私は何が欠けていますか?

編集 ここに私の問題をデモするフィドルがあります:フィドルの例 div の名前を documentList2 に変更すると、正しい動作が表示されます。documentList のままにしておくと、エラーが表示されます。div名を変更した後は必ず実行してください

4

3 に答える 3

0

タイプミスかどうかわかりませんが、「ToString」ではなく「toString()」です

var url = path.replace("/0","/" + data.Id.ToString());

する必要があります

var url = path.replace("/0","/" + data.Id.toString());
于 2013-03-08T20:54:38.617 に答える
0

ドキュメント オブジェクトで定義されていますかId? は、が に解決されていること/ViewDocument/undefinedを示しているようです。data.Id.ToString()undefined

Idドキュメントオブジェクトで定義するとうまくいくように見えるフィドルをここにまとめました:

http://jsfiddle.net/jtbowden/gf9QT/

window.location明らかな理由でこの行をコメントアウトしましたが、デバッグ コンソールで、正しい URL にアクセスしようとしていることがはっきりとわかります。

于 2013-03-08T17:22:28.410 に答える
0

documentList 要素 (他のサブ要素に関連付けられている) に、他に 2 つのクリック バインディングがあったことがわかりました。ただし、これらは window.location が有効になる前に起動していました。そのため、window.location が実行できるようになるまでに、url var は範囲外でした。

于 2013-03-11T14:31:14.863 に答える