2016-01-19 64 views
0

我使用$ .getJson從服務器調用(C#)構建observableArray。我的數組是從一個複雜對象列表構建的。複雜對象具有簡單的屬性和數組屬性。我只想讓我的對象的一個​​屬性(布爾值)可觀察,但我仍然希望能夠從UI訪問其他屬性(但其他屬性不會更改,因此我不希望它們是可觀察的)。目前我只是從我從服務器獲得的數據中填充我的observableArray。有沒有辦法只是創建一個屬性的觀察?Knockout JS只使一個複雜的對象可觀察的一個屬性

function viewModel() 
{ 
     var self = this; 
     self.documents = ko.observableArray(); 

     $.getJSON("/getdocuments", function (data) { 
      return self.documents(data); 
     }); 

} 

    ko.applyBindings(new viewModel()); 
+0

呀,只是有一個特性是可觀察的。沒有任何代碼,就很難比這更具體。 –

+0

我剛剛發佈了我如何創建我的數組。我沒有看到我可以在哪裏設置它的一個屬性爲可觀察 –

+0

現在,您的任何屬性都不是可觀察的。只需循環訪問'data'數組並添加一個observable並將其設置爲您想要的任何屬性即可。或者,使用映射插件。 –

回答

1

你可以做這樣說:在你成功

var ObjectModel = function(config) { 
    this.prop1 = config.prop1; 
    ... 
    this.propO = ko.observable(config.propO); 
} 
    1. 添加單個對象的構造函數,將建立每個觀察特性你的對象,你需要ajax回調迭代對象配置你得到並將它們饋送給該對象的構造函數,然後添加到你的主視圖模型中的數組:

      $.getJSON("/getdocuments", function (data) { 
          var arr = []; 
      
          data.forEach(function(objectCfg){ 
           arr.push(new ObjectModel(objectCfg)); 
          }) 
          self.documents(arr); 
      } 
      
  • +0

    謝謝你指出我正確的方向。我完全按照你所說的做了,除了我創建了一個函數來添加我的observable。 –

    0

    就像尼古拉說的,除了我用這個函數作爲我的數組的管道。

    var addProperty = function(inObject) 
    { 
        inObject.IsFav = ko.observable(inObject.IsFavorite); 
        return inObject; 
    } 
    
    
    $.getJSON("/getdocuments", function (data) { 
    var arr = []; 
    
    data.forEach(function(objectCfg){ 
        arr.push(addProperty(objectCfg)); 
    }) 
    self.documents(arr); 
    

    }

    相關問題