KnockoutJS - toJSON在计算函数中不起作用

时间:2013-07-10 16:52:53

标签: javascript jquery knockout.js

我正在使用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内容?

2 个答案:

答案 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/