2012-09-26 113 views
2

我有一個可觀察的用戶對象數組視圖模型設置。添加/刪除項目正常工作,但如何更新項目?我可以使用ko indexOf函數找到這些值。如何更新knockoutjs可觀察數組項目

function User(username, date_inactive, date_active) { 
    this.username = username; 
    this.date_active = date_active; 
    this.date_inactive = date_inactive; 
}; 

User.prototype.inactivateMe = function() { 
    json_responses.push(this); 
    $.getJSON("url" + this.username, function(json) { 
     original = json_response.pop(); 
     //do update here 
    }); 
}; 

userModel = [ ], //Where the loaded usernames are stored. 

viewUserModel = { 
    users: ko.observableArray(userModel) 
    //....... 

    //This is how I'm adding users to the array. 
addUser: function() { 
    $.getJSON("url", 
    { username: usern }, 
     function(json) { 
      if(json.STATUS != undefined && json.STATUS == 'success') { 
       newuser = new User(json.USERNAME, json.DATE_ACTIVE, json.DATE_INACTIVE ); 
       viewUserModel.users.push(newuser);    
      } 
     } 
    }); 
    } 

viewUserModel.users的值從服務器json響應中被推送到數組中。

我希望能夠在用戶單擊按鈕並且服務器響應成功時更新date_active和date_inactive值。

我的設置是從http://net.tutsplus.com/tutorials/javascript-ajax/into-the-ring-with-knockout-js-the-title-fight/

+0

你是否試圖讓'date_active'和'date_inactive'也可觀察? KO應該檢測對他們的訪問並訂閱相關的觀察結果。 – lanzz

+0

我已經考慮過這個問題,但我並不完全相信如何做出這項工作,因爲我是KO的新手。 – Aaron

回答

2

可觀察到的陣列僅跟蹤對數組的更改(例如,壓入和彈出)的適配,而不是數據本身。您需要像@Ianzz指定的那樣製作date-activedate_inactive觀察值。

function User(username, date_inactive, date_active) { 
    this.username = username; 
    this.date_active = ko.observable(date_active); 
    this.date_inactive = ko.observable(date_inactive); 
}; 

然後在你的HTML,做完整的例子一些諸如

<div data-bind="foreach: Users"> 
    <input data-bind="value: date_active"/> 
    <input data-bind="value: date_inactive"/> 
<div>​ 

fiddle

+0

我認爲這是我失蹤的另一部分。我需要調用該函數而不是直接設置該值。 this.date_active(date_active); 設置日期。 – Aaron

+0

@Ranan - 謝謝!我面臨同樣的問題,但你說的前幾句話「一個可觀察的數組只能跟蹤對數組進行的更改」語句清除了所有內容。 – Faisal

相關問題