我正在使用knockout映射插件来映射服务器中的对象。
我想重新发送这个对象,因此,我最终需要将此对象转换为字符串。我在计算函数中使用了淘汰函数ko.toJSON,以便隐藏字段可以获取此值。
这是一个jsFiddle:http://jsfiddle.net/etiennenoel/4EXSy/13/
这是我的视图模型
function appViewModel() {
var self = this;
self.playersEvaluation = ko.observableArray();
self.exportToJSON = ko.computed(function() {
return ko.toJSON(self.playersEvaluation)
}, this);
}
var viewModel = new appViewModel();
var dataContent = [{
playerId: 2,
playerName: "allo",
evaluatedExercises: [{
id: 1,
evaluationExerciseId: 1,
numberOfTries: 6,
tries: [{
id: 0,
number: 0,
result: 0
}, {
id: 0,
number: 0,
result: 0
}]
}]
}, {
playerId: 2,
playerName: "allo",
evaluatedExercises: [{
id: 1,
evaluationExerciseId: 1,
numberOfTries: 6,
tries: [{
id: 0,
number: 0,
result: 0
}, {
id: 0,
number: 0,
result: 0
}]
}]
}]
viewModel.playersEvaluation = ko.mapping.fromJS(dataContent);
ko.applyBindings(viewModel)
这是我在html中所做的:
<input type="hidden" name="a" data-bind="value: exportToJSON()" />
<pre data-bind="text: exportToJSON()">
</pre>
为什么它只显示空字符串而不是JSON格式的self.playersEvaluation
内容?
答案 0 :(得分:2)
您替换 playersEvaluation
的值,因此使用等于计算得出:
viewModel.playersEvaluation = ko.mapping.fromJS(dataContent);
需要这样:
viewModel.playersEvaluation(ko.mapping.fromJS(dataContent));
为了设置而不是替换observableArray。
更新小提琴: http://jsfiddle.net/dV5GM/1/
答案 1 :(得分:0)
input和pre上的文本绑定不正确,它应该是没有括号'()'的observalbale名称,因为playerEvaluation已经可以观察到,你应该以敲门方式分配值
viewModel.playersEvaluation(ko.mapping.fromJS(dataContent));
<input type="hidden" name="a" data-bind="value: exportToJSON" />
<pre data-bind="text: exportToJSON">
</pre>
这里是更新的jsfiddle:http://jsfiddle.net/4EXSy/15/