0

ボタン1をクリックすると、50個の連絡先配列(phoneNumbers、Addresses ...の配列のコレクションを含む)を持つオブジェクトを取得し、ボタン2をクリックすると同じオブジェクトを取得しますが、表示したいのに最初のオブジェクトが消去されます50 + 50 = 100 個の連絡先配列。concat メソッドを試しましたが、実装するのにいくつかの困難があります。

   viewModel.initializeListener = function() {

    $('#button1').click(function() {
        document.getElementById("button2").style.visibility = "hidden";
        $('#retrievedContactsDiv').html('');
         nbDisplayedContacts = 0;
        console.info("test");
         viewModel.ui.FlashbackReport.MoreContacts();



    });

    $('#button2').click(function() {
        viewModel.ui.FlashbackReport.MoreContacts();
        console.info("test");
    });

    }; `


  viewModel.WeHaveMoreContacts = function(data) {
    console.info("test:", data)
    if (viewModel.MoreContacts) {

        var newArray=ko.mapping.fromJS(data, viewModel.MoreContacts);
           var concatenated = newArray.concat(dataArray);
           viewModel.MoreContacts.contacts(concatenated);


    } else {
        viewModel.MoreContacts = ko.mapping.fromJS(data);
        var dataArray = viewModel.MoreContacts.contacts();

    }

サーバーでスキップする連絡先の数を指定したパラメーターがあります。

サーバーを呼び出してからマッピング関数を呼び出す関数:

viewModel.ui.FlashbackReport.MoreContacts()

問題 : オブジェクト # にはメソッド 'concat' がありません

4

1 に答える 1

1

私はあなたを助けるかもしれないフィドルを作りました。

関数の最初の部分は新しい連絡先を生成し、2 番目の部分はそれらを既存の連絡先に追加します。

var VM = function () {
    var self = this;
    self.contacts = ko.observableArray();

    self.addMore = function () {
        // simulate server response 
        var offset = self.contacts().length;
        var dataFromServer = [];
        for (var index = 0; index < 10; index++) {
            dataFromServer.push({
                name: 'contact ' + offset + index
            });
        }
        // add each new item to existing items.
        ko.utils.arrayForEach(dataFromServer, function (item) {
            self.contacts.push(item);
        });

    };
}

気軽にもっと説明を聞いてください。

お役に立てば幸いです。

于 2013-07-24T11:25:19.487 に答える