在我的KnockoutJS視圖模型邏輯中,我有一個當前顯示對象(項目視圖模型)的可觀察數組:self.currentProjects
。根據項目篩選設置(用戶動態選擇項目類型)self.currentProjects
包含UI綁定的不同對象。ObservableArray.RemoveAll()清空不同變量中的拼接對象
在某些情況下,我需要將不同的項目加載到視圖中,我需要清空currentProjects並將不同的模型放入其中。我通過調用self.currentProjects.removeAll();
來解決這個問題,當我打電話給它時,另一個可觀察的數組self.ProjectModels
應該保持對同一組模型的引用也顯示爲空。我應該如何管理可觀察數組中的對象,以便從一個數組中移除不會導致另一個數組變爲空。
這裏是一個操作相關的代碼:
//Another menu item is selected
self.selectItem = function(newId) {
self.selectedItemId(newId);
self.currentProjects.removeAll(); //This is the point where self.ProjectModels also looses model references
var someProjectsLoaded = false;
jQuery.each(self.projectModels, function (i, val) {
if (val.type == self.selectedItemId()) {
self.currentProjects(val.models);
var projectsPerPage = parseInt($('#ProjectsPerPage').val(), "10");
self.page(val.models.length/projectsPerPage);
someProjectsLoaded = true;
}
});
if (!someProjectsLoaded) {
self.page(1);
self.LoadMoreProjects();
}
};
self.LoadMoreProjects = function() {
var getProjectsUrl = $("#GetNextProjectsUrl").val();
$.ajax({
url: getProjectsUrl,
data: {
page: parseInt(self.page(), "10"),
type: self.selectedItemId()
},
beforeSend: function() {
//$("#ajaxload").show();
},
success: function (result) {
var newlyAddedModelsArray = jQuery.map(result, function (val, i) {
var vm = new ProjectViewModel(val, self);
self.currentProjects.push(vm);
return vm;
});
self.page(parseInt(self.page(), "10") + 1);
var typeAlreadyInChache = false;
jQuery.each(self.projectModels, function (i, val) {
if(val.type == self.selectedItemId()) {
val.models = val.models.concat(newlyAddedModelsArray); //HERE IS WHERE I SUSPECT A COPY BE REFERENCE TAKES PLACE
typeAlreadyInChache = true;
}
});
if(!typeAlreadyInChache) {
self.projectModels.push({ type: self.selectedItemId(), models: newlyAddedModelsArray });
}
},
error: function() {
$("#error").show();
}
});
};
你的視圖模型的其餘部分是什麼樣的? –