2014-02-27 64 views
0

我目前正在學習knockout.js及其獨特的功能。我已成功創建聯繫表單。我可以根據需要添加或刪除儘可能多的聯繫人。我不完全理解在數據庫中存儲值的概念。我將值放入JSON對象中,然後使用$.post("/some/url.php"發送存儲在mysql db中的值。但是,根本不工作。我在服務器端使用php。如何將聯繫人值存儲在mysql數據庫中?我也需要將json對象解碼爲一個正常的數組在PHP中存儲? JSFIDDLE從數據庫json對象存儲值 - knockout.js

var initialData = [{ 
    firstName: "Jenny", 
    lastName: "LaRusso", 
    phone: "(555) 121-2121", 
    alt_phone: "(555) 123-4567", 
    main1: false, 
    main2: true  
}, { 
    firstName: "Sensei", 
    lastName: "Miyagi", 
    phone: "(555) 444-2222", 
    alt_phone: "(555) 999-1212", 
    main1: true, 
    main2: false 
}]; 

var ContactsModel = function (contacts) { 
    var self = this; 
    self.contacts = ko.observableArray([]); 

    ko.utils.arrayForEach(contacts, function (contact) { 
     self.contacts.push({ 
      firstName: contact.firstName, 
      lastName: contact.lastName, 
      phone: contact.phone, 
      alt_phone: contact.alt_phone, 
      main1: ko.observable(contact.main1), 
      main2: ko.observable(contact.main2) 
     }); 
    }); 

    self.addContact = function() { 
     self.contacts.push({ 
      firstName: "", 
      lastName: "", 
      phone: "", 
      alt_phone: "", 
      main1: false, 
      main2: false 
     }); 
    }; 

    self.removeContact = function (contact) { 
     self.contacts.remove(contact); 
    }; 

    self.addPhone = function (contact) { 
     contact.phones.push({ 
      number: "" 
     }); 
    }; 

    self.removePhone = function (phone) { 
     $.each(self.contacts(), function() { 
      this.phones.remove(phone) 
     }) 
    }; 

    self.save = function() { 
      self.lastSavedJson(JSON.stringify(ko.toJS(self.contacts), null, 2)); 
     }; 


    self.lastSavedJson = ko.observable(""); 

    //This is not working 
    $.post("/some/url.php", initialData, function(returnedData) { 
     // This callback is executed if the post was successful 
    }) 
}; 

ko.applyBindings(new ContactsModel(initialData)); 

回答

1

你的小提琴不工作,因爲它沒有引用jQuery。也許這是你的問題。這是一個固定的小提琴:http://jsfiddle.net/azurelogic/dLbY7/17/。現在我得到一個404,因爲「/some/url.php」不是真實的。

編輯:

邏輯關閉。你應該在save函數之前聲明lastSavedJson。此外,該帖子需要在保存中調用。就像這樣:

self.lastSavedJson = ko.observable(""); 

self.save = function() { 
    self.lastSavedJson(JSON.stringify(ko.toJS(self.contacts), null, 2)); 
    $.post("/some/url.php", self.lastSavedJson(), function(returnedData) { 
     // This callback is executed if the post was successful 
    }) 
}; 

//initial post if it is still needed 
$.post("/some/url.php", initialData, function(returnedData) { 
    // This callback is executed if the post was successful 
}) 

如果你不真正需要使用lastSavedJson爲別的,你可以內聯入職。

我發現它有助於我首先聲明所有可觀測量,然後計算並最終得到函數。

+0

好的,有道理。但是這個帖子的邏輯是否正確。例如,如果單擊「保存」按鈕,我想發佈 –

+0

編輯答案以解決邏輯問題。 – azurelogic