1

如果这是一个愚蠢的问题,请原谅我,但我似乎无法在文档中找到它。

我想构建一个 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>
4

2 回答 2

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.
于 2013-03-05T06:11:36.950 回答
0

您可以使用:

var js = ko.toJS(StoresViewModel);

这是最简单的方法,尽管您需要在 IE 6 + 7 中包含一个JSON stringify 库。

或者,您可以使用Knockout.js 映射插件,它可以让您更加灵活,例如能够忽略视图模型上的一些可观察对象:

var mapping = {
    'ignore': ["propertyToIgnore", "alsoIgnoreThis"]
}
var viewModel = ko.mapping.fromJS(data, mapping);
于 2013-03-04T23:05:17.747 回答