我的应用正在使用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()
的结果
我顽皮的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,显示我在做什么,但我的问题是更多w / api调用通过durandal获取和绑定数据所以我不确定它是否有帮助:http://jsfiddle.net/crathermel/7kH9C/4/
所以我的问题是我真的不明白如何调试过去的听力和/或为什么ViewModelBinder没有收集我的所有项目。
感谢您的帮助!
答案 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);
};
}