2

我的应用程序正在使用 durandalJS 和 KnockoutJS,而我的 obserableArrays 之一没有绑定通过我的 api 调用返回的所有数据。

捆绑:

function refresh() {
        return conversationService.get(self.id()).done(function (result) {
            ko.object.map(self, result);
            system.log("Get Convo Data", result);
        });
    }

conversationService.get() 的结果

API 结果

我顽皮的 observableArray:

    self.participants = ko.observableArray([]).extend({
        staffId: ko.observable(),
        userId: ko.observable(),
        name: ko.observable()
    });

我的绑定

在此处输入图像描述

标记

<h4>Participants JSON</h4>
<pre data-bind="text: ko.utils.stringifyJson($root.participants())"></pre>
<pre data-bind="text: ko.utils.stringifyJson($root.participants().length)"></pre>

jsFiddle 这是一个工作的 jsFiddle,它显示了我在做什么,但我的问题更多是通过 durandal 获取和绑定数据的 api 调用,所以我不确定它是否有帮助:http: //jsfiddle.net/crathermel/7kH9C/ 4/

所以我的问题是我真的不明白如何调试过去的听力和/或为什么 ViewModelBinder 没有拿走我的所有物品。

谢谢您的帮助!

4

1 回答 1

1

没有足够的信息来诊断问题,但是我已经分叉了你的 jsFiddle 并添加了几个用例(刷新/刷新所有按钮)来展示如何将值绑定到可观察数组。这是给你的 jsFiddle

http://jsfiddle.net/dhanasekaran/76jA5/2/

var vm = function () {
var self = this;
self.participants = ko.observableArray([]).extend({
    staffId: ko.observable(),
    userId: ko.observable(),
    name: ko.observable()
});
self.refresh = function () {
    var pp = {
        staffId: 2,
        userId: 102,
        name: 'Jack'
    };

    self.participants.push(ko.mapping.fromJS(pp));
};
self.refreshAll = function () {
    var pps = [{
        staffId: 2,
        userId: 102,
        name: 'Jack'
    }, {
        staffId: 3,
        userId: 103,
        name: 'Jim'
    }];

    self.participants(ko.mapping.fromJS(pps)());
    //or self.participants = ko.mapping.fromJS(pps);
};

}

于 2013-07-18T13:58:50.260 回答