2015-02-23 3 views
2

Я хочу объединить несколько json-данных в один vm. Я читал, что вы можете многократно отображать js в модель, и это должно быть слияние, но на моем случае это не так. Он заменяет данные.Нокаут, объединяющий несколько json-данных в один vm

function Item(ID, Name, Description) { 
    this.ID = ko.observable(ID); 
    this.Name = ko.observable(Name); 
    this.Description = ko.observable(Description); 

} 

var MasterViewModel = { 
    model: ko.observableArray([]) 

}; 

$.getJSON(url, function (response) { 
    ko.mapping.fromJS(response["TM1.Cube"], Item, MasterViewModel.model); 
    ko.mapping.fromJS(response["TM1.Dimension"], Item, MasterViewModel.model); 

}) 

ko.applyBindings(MasterViewModel); 

А вот мои данные JSON

{ 
    "LogicalName": "TM1.Model", 
    "ID": "12345", 
    "Name: "Sample", 
    "TM1.Cube": [ 
     { 
      "LogicalName": "TM1.Cube", 
      "ID": "111111", 
      "Name": Assets" 
     }, 
     { 
      "LogicalName": "TM1.Cube", 
      "ID": "111112", 
      "Name": Finance" 
     } 
    ], 
    "TM1.Dimension": [ 
     { 
      "LogicalName": "TM1.Dimension", 
      "ID": "222221", 
      "Name": Assets" 
     }, 
     { 
      "LogicalName": "TM1.Dimension", 
      "ID": "222222", 
      "Name": Finance" 
     } 
    ] 
} 

и конечных результатов я ожидал, как это

{ 
    "LogicalName": "TM1.Cube", 
    "ID": "111111", 
    "Name": Assets" 
}, 
{ 
    "LogicalName": "TM1.Cube", 
    "ID": "111112", 
    "Name": Finance" 
}, 
{ 
    "LogicalName": "TM1.Dimension", 
    "ID": "222221", 
    "Name": KPI" 
}, 
{ 
    "LogicalName": "TM1.Dimension", 
    "ID": "222222", 
    "Name": Default" 
} 

Я добавил jsFiddle http://jsfiddle.net/e1ppj3qc/1/

+0

просмотрел вы документацию? http://knockoutjs.com/documentation/plugins-mapping.html –

+0

Да, у меня и выше, очень похоже на документацию. var viewModel = ko.mapping.fromJS (alice, aliceMappingOptions); ko.mapping.fromJS (bob, bobMappingOptions, viewModel); Но на моем случае он не сливается, а вместо этого заменяет содержимое на bob. Я хочу объединить alice и bob в viewModel. –

ответ

0

отображение плагин может принимать существующая модель, но я не думаю, что она объединит данные.

Например, вы можете отобразить два раза примерно так:

{one: "yo"} и {two: "dawg"}

в одной и той же модели, и вы бы теперь два наблюдаемыми, один() и два()

Но если вы должны были это сделать (какие вы есть): {one: ["yo"]} и {one: ["dawg"]}

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

function pushCubs(dataToPush) { 
    ko.utils.arrayPushAll(MasterViewModel.modelcub, dataToPush()); 
} 

pushCubs(ko.mapping.fromJS(data)); 
pushCubs(ko.mapping.fromJS(data2)); 

http://jsfiddle.net/e1ppj3qc/2/

+0

Спасибо, это сработает. Быстрый вопрос, вы упомянули о , теперь у вас есть две наблюдаемые, одна() и две() Можно ли вызвать наблюдаемые на основе one() или two(). –

+0

Не знаете, что вы имеете в виду? Вы имеете в виду это? : http://jsfiddle.net/7Lurz77h/ – 4imble

 Смежные вопросы

  • Нет связанных вопросов^_^