2

私のアプリは durandalJS と KnockoutJS を使用していますが、obserableArrays の 1 つが 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 をフォークし、いくつかの使用例 (refresh/refreshAll ボタン) を追加して、値を監視可能な配列にバインドする方法を示しました。ここに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 に答える