请原谅我这是一个愚蠢的问题,但我似乎无法在文档中找到这个。
我想构建一个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 :(得分: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 String
创建json对象 var jsonString = ko.toJSON(StoresViewModel);
alert(jsonString);//alerts the json String.
var myJsonObj = $.parseJSON(jsonString);
alert(myJsonObj);//alerts the object.
答案 1 :(得分:0)
您可以使用:
var js = ko.toJS(StoresViewModel);
这是simplest way这样做,但您需要在IE 6 + 7中包含JSON stringify library。
或者,您可以使用Knockout.js mapping plugin,这样可以更灵活,例如可以忽略视图模型上的某些可观察对象:
var mapping = {
'ignore': ["propertyToIgnore", "alsoIgnoreThis"]
}
var viewModel = ko.mapping.fromJS(data, mapping);