从ko.observables knockout.js创建json对象

时间:2013-03-04 22:55:18

标签: 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>

2 个答案:

答案 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);