2013-03-04 57 views
1

請原諒我,如果這是一個愚蠢的問題,但我似乎無法在文檔中找到它。從ko.observables創建json對象knockout.js

我想建立一個JSON對象,我可以使用我的ko.observables();通過ajax發送。

我的視圖模型看起來像這樣,但問題是如果我將storeNumber文本框的值更改爲空的文本框。它不會在self.searchTest對象中更新。

我可能會做這個完全錯誤的,這是從我的文本框創建一個JSON對象的最佳方式?看起來很混亂。

function StoresViewModel() { 
     // Data 
     var self = this; 
     self.stores = ko.observableArray([]); 
     self.storeNumber = ko.observable(); 
     self.cityName = ko.observable(); 
     self.stateName = ko.observable();   



     self.searchTest = { 
      "City": self.cityName, 
      "State": self.stateName, 
      "StoreNumber": self.storeNumber, 
     }; 

HTML:

<label for="term">Search by store number:</label> 
    <input data-bind="value: storeNumber" id="storenumber" name="storenumber" 
    placeholder="Store Number"/> 
    <br /><b>or</b><br /> 
Search by city and state:<br /> 

<input data-bind="value: cityName" id="city" name="city" placeholder="City"/> 
<select name="state" data-bind="value: stateName">//lots of selects</select> 

回答

0

您可以使用:

var js = ko.toJS(StoresViewModel); 

這是做它的simplest way,雖然你需要包含在IE JSON stringify library 6 + 7

或者,您可以使用Knockout.js mapping plugin,它可以讓您更加靈活xibility,如能夠忽視一些觀測對您的視圖模型:

var mapping = { 
    'ignore': ["propertyToIgnore", "alsoIgnoreThis"] 
} 
var viewModel = ko.mapping.fromJS(data, mapping); 
1

要創建JSON對象

var jsonObj = ko.toJS(StoresViewModel); 
alert(jsonObj);//alerts the object. 

注:這個工作對那些沒有原生JSON序列舊的瀏覽器(例如,IE 7或更早版本),您還必須參考json2.js庫。

要產生JSON字符串

var jsonString = ko.toJSON(StoresViewModel); 
alert(jsonString);//alerts the json String. 

您也可以從JSON字符串創建JSON對象

var jsonString = ko.toJSON(StoresViewModel); 
alert(jsonString);//alerts the json String. 

var myJsonObj = $.parseJSON(jsonString); 
alert(myJsonObj);//alerts the object.