2013-05-03 56 views
1

有了这样的一个JSON:如何使用KnockoutJS和映射插件观察子对象?

JSON字符串

{ 
    "SelectedOption" : {}, 
    "Options" : [ 
    { "ID": 0, "Name": "Zero" }, 
    { "ID": 1, "Name": "One" } 
    ] 
} 

的问题是:我怎么能告诉映射插件,该SelectedOption属性为ko.observable

客户端代码

var _json = '{ 
       "SelectedOption" : {}, 
       "Options" : [ 
       { "ID": 0, "Name": "Zero" }, 
       { "ID": 1, "Name": "One" }  
       ] 
      }'; 

var viewModel = ko.mapping.fromJSON(_json); 
ko.applyBindings(viewModel); 

我写了一个的jsfiddle显示问题 http://jsfiddle.net/BvVce/3/

+0

有一个复杂的对象http://jsfiddle.net/BvVce/8/ – Tocco 2013-05-03 14:43:39

+0

参考此答案的工作的例子,我已经回答了类似的问题[这里] [1] [1]:http://stackoverflow.com/a/24670804/2764258 – 2014-07-10 07:47:52

回答

4

你必须提供一个自定义映射,以指示映射函数,应该怎么做。我已更新您的fiddle

这里的自定义映射,并且将改变呼叫ko.mapping:

var mapping = { 
    'SelectedOption': { 
     create: function(options) { 
      return ko.observable(options.data); 
     } 
    } 
} 

var viewModel = ko.mapping.fromJSON(_json, mapping); 

,然后在你的HTML,你必须在“()”字符添加到SelectedOption,因为它现在是一个可观测,像这样:

<span data-bind="text: SelectedOption().ID"></span> 
+1

谢谢。那些具有类似属性的对象数组呢?你有什么主意吗? – Tocco 2013-05-03 13:43:56

+0

你的意思是一组可选择的选项?如果是这样的话,而不是返回一个ko.observable,我可以返回一个ko.observableArray映射到ko.utils.arrayMap。 – Jalayn 2013-05-03 13:48:34

+0

@Tocco我用一个可观察数组更新了另一个版本的小提琴,可以选择多个选项,以便查看它是如何完成的:http://jsfiddle.net/BvVce/6/ – Jalayn 2013-05-03 13:52:57

相关问题