2013-03-12 27 views
2

我正在使用Ryan Niemeyer's Dirty Flag。 他的方法的一個例子可以在這個jsFiddle中看到。Knockout isDirty示例,使用來自映射插件的動態視圖模塊

他對視圖模型

this.dirtyItems = ko.computed(function() { 
    return ko.utils.arrayFilter(this.items(), function(item) { 
    return item.dirtyFlag.isDirty(); 
    }); 
}, this); 

一個dirtyItems方法。然而,我似乎無法得到他的dirtyItems方法與我data.The最大的不同工作是我使用映射插件。 我試過的所有東西都回來了。

這是我實施的jsFiddle

+0

你希望你的旗子在什麼級別?你希望它是按類別還是按配置文件屬性? – 2013-03-12 17:04:22

+0

也許我錯誤地認爲它被設置在任何可觀察值(如ProfilePropertyValue)上,並且任何更改都會將其傳播,以便每個父級別也會顯示爲髒。 如果它必須是一個或另一個,那麼我希望它被設置在ProfilePropertyValue級別。 – 2013-03-12 19:31:37

回答

3

您可以在dirtyFlag添加到ProfilePropertyValue,如:

var mappingOptions = { 
    ProfilePropertyValue: { 
     create: function (mappingoptions) { 
      var data = mappingoptions.data; 
      data.ProfilePropertyValue = data.ProfilePropertyValue || { 
       "ID": null, 
        "Checkbox": ko.observable(false) 
      }; 

      var result = ko.mapping.fromJS(data); 
      result.dirtyFlag = ko.dirtyFlag(result); 

      return result; 
     } 
    } 
}; 

然後,你需要建立你的髒物品清單時檢查它,如果這是你需要的東西。

示例:http://jsfiddle.net/rniemeyer/7DGfs/

+0

這看起來不錯,我的問題很大一部分解決了。 現在,我將如何返回只是** ProfilePropertyValue **從_viewModel.dirtyItems_是髒的,而不是包含屬性和ProfilePropertyValue的整個類別? – 2013-03-13 02:39:23

+0

你可以改變過濾器的功能更像這樣:http://jsfiddle.net/rniemeyer/W3zkQ/ – 2013-03-13 03:47:30

+0

謝謝,我考慮使用foreach,但認爲這是可能的使用arrayFilter。 – 2013-03-13 04:00:16