Отображение Knockoutjs

Можно ли сделать наблюдаемыми только дочерние элементы с помощью плагина сопоставления knockoutjs?

У меня есть большой объем данных в формате ниже (400/500 записей), автоматическое сопоставление очень медленное, поскольку оно делает все поля наблюдаемыми, но мне нужно только сделать наблюдаемыми дочерние элементы.

Как мне вручную сделать наблюдаемыми только дочерние поля, игнорируя другие?

Кроме того, как лучше всего работать с последним объемом данных? Любая подкачка на стороне сервера с кодом knockoutjs была бы замечательной.

Спасибо.

{
    "name": "John Smith",
    "age": 32,
    "employed": true,
    "address": {
        "street": "701 First Ave.",
        "city": "Sunnyvale, CA 95125",
        "country": "United States"
    },
    "children": [
        {
            "name": "Richard",
            "age": 7
        },
        {
            "name": "Susan",
            "age": 4
        },
        {
            "name": "James",
            "age": 3
        }
    ]
}

person Huzzi    schedule 12.01.2013    source источник


Ответы (1)


Вам не нужно передавать в функцию сопоставления весь объект, только те части, которые вы хотите сопоставить. Поскольку вы хотите просто сопоставить дочерний массив, передайте его в сопоставитель.

var data = {
    "name": "John Smith",
    "age": 32,
    "employed": true,
    "address": {
        "street": "701 First Ave.",
        "city": "Sunnyvale, CA 95125",
        "country": "United States"
    },
    "children": [
        {
            "name": "Richard",
            "age": 7
        },
        {
            "name": "Susan",
            "age": 4
        },
        {
            "name": "James",
            "age": 3
        }
    ]
};

data.children = ko.mapping.fromJS(data.children);

В противном случае вы можете использовать параметры сопоставления, чтобы указать, что вы хотите скопировать другие поля (в отличие от их сопоставления).

var mappingOptions = {
  'copy': [
    'name',
    'age',
    'employed',
    'address'
  ]
};
var mapped = ko.mapping.fromJS(data, mappingOptions);
person Jeff Mercado    schedule 12.01.2013