0

我正在使用淘汰映射插件从我的服务器映射一个对象。

我想重新发送这个对象,因此,我最后需要将此对象转换为字符串。我在计算函数中使用了敲除函数 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>

为什么它只显示一个空字符串而不是self.playersEvaluationJSON 格式的内容?

4

2 回答 2

2

您正在使用 equals 的这种用法替换的值,playersEvaluation因此计算的值:

viewModel.playersEvaluation = ko.mapping.fromJS(dataContent);

需要是这样的:

viewModel.playersEvaluation(ko.mapping.fromJS(dataContent));

为了设置而不是替换 observableArray。

更新小提琴:http: //jsfiddle.net/dV5GM/1/

于 2013-07-10T16:58:10.193 回答
0

input 和 pre 上的文本绑定不正确,它应该只是不带括号“()”的 observalbale 名称,而且由于 playerEvaluation 已经是 observable ,您应该以淘汰方式分配值,即

 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/

于 2013-07-10T17:01:52.050 回答