我有以下幾點:window.location的內部knockoutjs視圖模型不能正常工作
HTML
<div id="documentsList" data-bind="foreach: documents">
<span class="ui-icon ui-icon-document" data-bind="click: $root.onViewDocumentClick"></span>
</div>
JAVASCRIPT
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 ...這當然會因爲頁面不存在而引發錯誤。
如果我做了以下更改來處理通過jQuery而不是Knockout的點擊事件,那麼事情工作正常。
HTML
<span class="ui-icon ui-icon-document" data-bind="text: Id"></span>
JAVASCRIPT
$("#documentsList").on("click","span.ui-icon-document",function() {
var path = "/ViewDocument/0";
var url = path.replace("/0","/" + $(this).text());
window.location = url;
});
我缺少什麼?
編輯 這裏是演示我的問題一個小提琴:如果更改div的名字documentList2你會看到正確的行爲Fiddle Example 。如果你離開它documentList,你會看到錯誤。 請務必在更改div名稱後運行
'window.location'不是你的問題。看起來'data.Id.ToString()'返回'undefined'。 – 2013-03-08 17:00:07
不,我在數組中的對象不是可觀察對象,也沒有可觀察屬性。看到上面的小提琴。 – RHarris 2013-03-08 17:36:24
你的小提琴似乎以前工作得很好,特別是如果我更改URL以使用'數據。id',因爲這是具有路徑的部分:http://jsfiddle.net/jtbowden/CQS5q/1/ – 2013-03-08 17:52:09