2013-02-20 81 views
1

upate完成後如何更新表格。繼承人我的示例代碼。如果您點擊更新,表格不會更新。knockoutjs在編輯後更新了表格

self.updateCategory = function(category){ 
     var r = confirm("Are you sure you want to update this category " + self.ID() + "?"); 
     if(r==true){ 
      //code here? 
     } 
    }; 

http://jsfiddle.net/comfreakph/2TrjF/3/

+0

你的jsfiddle似乎工作正常,你在問什麼? – 7zark7 2013-02-20 06:39:11

+0

如果您點擊更新按鈕。該表未更新。 – comfreakph 2013-02-20 06:42:44

回答

0

有幾個的,你需要做的事情。首先,使用knockout mapping plugin,然後設置使用類別屬性:

self.Categories = ko.mapping.fromJS(category); 

您的代碼使陣列可觀察到的,而不是在它的每個項目。通過使用映射插件,可以使每個類別及其所有屬性都可見。

然後,你需要更新你的更新功能,以獲得原始類別並更新它的值:

self.updateCategory = function (category) { 
    var r = confirm("Are you sure you want to update this category " + self.ID() + "?"); 
    if (r == true) { 
    var original = ko.utils.arrayFirst(self.Categories(), function (item) 
    { 
     return category.ID() == item.ID(); 
    }); 
     console.log(original.CreatedAt()); 
     original.Name(self.Name()); 
     original.Remarks(self.Remarks()); 

     self.Name(""); 
     self.Remarks(""); 
     self.isSelected(true); 
     } 
    }; 

你會發現,在表中的行會自動更新,當您更改值。

jsFiddle available

+0

謝謝@Paul Manzotti – comfreakph 2013-02-20 14:39:49

+0

@comfreakph沒問題,樂於幫忙!但是,沒有什麼說謝謝你喜歡高票。 ;) – 2013-02-20 14:41:19

0

它沒有更新,因爲你沒有代碼:-)

self.updateCategory = function(category) { 
    var r = confirm("Are you sure you want to update this category " + self.ID() + "?"); 
    if(r == true) { 
     // Code here? 
    } 
}; 

如果你問怎麼了,那麼「//代碼在這裏」一節中,你需要再從您保存的ID中找到數組中的類別,然後從self.Name和self.Remarks屬性中設置其屬性。

+0

ca你給我看代碼嗎? – comfreakph 2013-02-20 08:51:11

0

這是一個粗略的解決方案,但它似乎工作>我嘗試根據ID找到原始元素,然後用從數據創建的新元素進行替換。
我相信有更有效的方法來找到原始的,但想法是你可以在可觀察數組上進行替換。

self.updateCategory = function (category) { 
    var r = confirm("Are you sure you want to update this category " + self.ID() + "?"); 
    if (r == true) { 
     var index = -1; 
     $.each(self.Categories(), function (i, item) { 
      if (this.ID === category.ID()) { 
       index = i; 
      } 
     }); 
     var original = self.Categories()[index]; 
     console.log(original.CreatedAt); 
     category.Name = self.Name(); 
     category.Remarks = self.Remarks(); 
     category.CreatedAt = original.CreatedAt; 

     self.Categories.replace(original, category); 
     self.Name(""); 
     self.Remarks(""); 
     self.isSelected(true); 
     } 
    }; 

檢查此琴:http://jsfiddle.net/2TrjF/5/

+0

正如你所說,這有點粗俗!如果您使底層的Categories屬性完全可觀察,則它更乾淨更容易。看我的意思。 – 2013-02-20 13:55:23