2013-03-01 115 views
1

我想動態創建observables,但它不太工作。以下是我有:我在做什麼與knockout.js這裏做錯了?

//這種類型的作品

this.Name = ko.observable(data.Name); 
    this.Age = ko.observable(data.Age); 

//這是我想要的工作

for (var propertyName in data) { 
     this.propertyName = ko.observable(propertyName); 
    } 

這將產生只是屬性名稱,即「名」的東西, 「年齡」,但第一個產生的價值和名稱,當我調試像「名稱」是「約翰」。

+1

到底是什麼回事? – 2013-03-01 13:51:50

+1

http://stackoverflow.com/questions/85992/how-do-i-enumerate-the-properties-of-a-javascript-object – Martin 2013-03-01 13:56:19

+0

我想第二個行爲像第一個工作。 – Rayshawn 2013-03-01 13:56:41

回答

5

什麼:

for (var propertyName in data) { 
    this[propertyName] = ko.observable(data[propertyName]); 
} 

this.propertyName實際上將設置一個名爲 「PROPERTYNAME」 屬性。通過使用括號,可以使用變量來定義屬性。

ko.observable(propertyName);正在定義一個屬性名稱作爲其值的可觀察值。

您還可能要檢查如果該值是一個數組,所以你可以創建一個可觀察到的數組,其中需要:

for (var propertyName in data) { 
    var value = data[propertyName]; 
    if ($.isArray(value)) { // assuming your using jQuery 
     this[propertyName] = ko.observableArray(value); 
    } else { 
     this[propertyName] = ko.observable(value); 
    } 
} 
+0

嗯,我試過類似的,不知道要拿的「。」由此' – Rayshawn 2013-03-01 14:02:56