2013-04-18 23 views
0

我有,一旦加載遠程模式對話框創建了信息的幾位新模式的模態這樣:KnockoutJS的foreach心不是內工作的遠程加載模態對話框

var modalModel = { 
    SessionId: viewModel.SessionId(), 
    RetCols: ko.observableArray([]) 
}; 

$('#UploadModal').ajaxComplete(function (event, request, settings) { 
    ko.applyBindings(modalModel, $('#zupload')[0]); 
}); 

這工作得很好,我m打印會話id到模式,所以我知道那裏的信息和模型顯示在螢火蟲。不過,我有以下函數,它會調用ajax並將響應讀入observableArray RetCols。這樣做是因爲我在頁面上打印長度並顯示它有項目,但我不能爲我的生活提供它。這裏有什麼不對嗎?下面是Ajax調用:

function uploadSubmit() { 
$.ajax({ 
    url: '/Upload/UserSaveFileInfo/', 
    type: 'post', 
    async: false, 
    data: ko.toJSON({ 
     UploadName: $("#uploadName").val(), 
     UploadDescription: $("#uploadDescription").val(), 
     Id: $('#uploadId').val() 
    }), 
    contentType: 'application/json', 
    success: function (result) { 
     for (var i = 0; i < result.length; i++) 
     { 
      modalModel.RetCols.push({ 
       Id: result[i].Id, 
       Header: result[i].Header, 
       Values: result[i].Values, 
       MatchedTo: result[i].MatchedTo, 
       ColumnNumber: result[i].ColumnNumber 
      }); 
     } 
     alert(modalModel.RetCols().length); 
    }, 
    error: function (jqXHR, textStatus, errorThrown) { 
     console.log(data); 
    } 
}); 
} 

,這裏是我的模式,這並不比特希望工作:

<span data-bind="text: modalModel.RetCols().length"></span> <!-- this works! --> 


<!-- ko foreach: modalModel.RetCols --> 
     <div class="control-group" > 
      <label class="control-label"> 
       Column <span data-bind="text: $data.ColumnNumber"></span> 
      </label> 
      <div class="controls"> 
       <input data-bind="value: $data.MatchedTo" /> 
       <span class="help-block" data-bind="text: $data.Values"></span> 
      </div> 
     </div> 
<!-- /ko --> 

任何幫助,將不勝感激!這裏是一個小提琴:http://jsfiddle.net/ZLBpu/154/由於模態的遠程加載,它與上面描述的有點不同,但我已經或多或少地重複發生了什麼。

編輯:特別是,moveToModal的ajax調用似乎是什麼導致這個炸彈出來。這個小提琴在ajax調用中具有相同的功能,它的工作原理與我預期的一樣:http://jsfiddle.net/valvemail/RJ8Vx/1/。所以特別是ajax調用一定有問題。

回答

0

我不認爲你需要放置「$數據」。在foreach中的每個屬性之前。

編輯

我得到了它的jsfiddle link

到工作中使用此HTML:

<span data-bind="text: RetCols().length"></span> <!-- this works! --> 

<!-- ko foreach: RetCols --> 
    <div class="control-group" > 
     <label class="control-label"> 
      Column <span data-bind="text: $data.ColumnNumber"></span> 
     </label> 
     <div class="controls"> 
      <input data-bind="value: $data.MatchedTo" /> 
      <span class="help-block" data-bind="text: $data.Values"></span> 
     </div> 
    </div> 
<!-- /ko --> 

而且這個JS:

var modalModel = { 
    SessionId: 'a', 
    RetCols: ko.observableArray([]) 
}; 

modalModel.RetCols.push({ 
    ColumnNumber: 1, 
    MatchedTo: "mt", 
    Values: "values" 
}); 

ko.applyBindings(modalModel); 

編輯2

我看了看你的小提琴。我認爲問題在於viewModel已經綁定到你正試圖綁定modalModel的html。爲了解決這個問題,我重構了一些代碼,使modModel成爲viewModel的一部分。然後我把modalModel的布爾可觀察性,你可以切換到「綁定」模式。

我也把你插入的HTML在ajax調用中的HTML。如果有綁定,我用knockout包圍它,這樣你就不應該爲不存在的屬性出錯。

Here is the fiddle

+0

我已經試過這兩種方法及其仍然沒有工作...我認爲,一個foreach將有或沒有它的工作,我只是用來處理孩子的集合,所以我已經得到了在使用它的習慣... – zach

+0

好的...我不認爲這應該是一個問題,但你有沒有嘗試在foreach行上更改「modalModel.RetCols」爲「modalModel.RetCols()」? –

+0

我想你誤解了這個問題,如果我不清楚,我很抱歉。我有2個獨立的視圖模型,其中一個存在於父頁面上,一個是我在創建ajax加載模式窗口時創建的。 modalModel是用於加載iframe的數據。我會做一個小提琴,但因爲它有一個外部iframe它有點棘手...modalModel只針對iframe內容,這就是爲什麼我在ajax完成加載iframe內容後應用模型...生病嘗試弄出一個小提琴,但我只是想要一種方式在斷開連接時尚。 foreach RetVals()不起作用要麼 – zach

相關問題