ObservableArray仅填充一条记录

时间:2013-07-12 18:20:43

标签: knockout.js durandal

我的应用正在使用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 Results

我顽皮的observableArray:

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

我的约束

enter image description here

标记

<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,显示我在做什么,但我的问题是更多w / api调用通过durandal获取和绑定数据所以我不确定它是否有帮助:http://jsfiddle.net/crathermel/7kH9C/4/

所以我的问题是我真的不明白如何调试过去的听力和/或为什么ViewModelBinder没有收集我的所有项目。

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

没有足够的信息来诊断问题,但是我已经分叉你的jsFiddle并添加了几个用例(refresh / refreshAll按钮)来展示如何将值绑定到observable Array。这是适合你的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);
};

}