2014-01-09 1 views
2

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

Простой пример:

var data = { 
    Type: 1, 
    Id: "123-12321" 
}; 

var RiskItemModel = function (item) { 
    var self = this; 
    self.Id = ko.observable("tes"); 
    self.Type = ko.observable(); //enum int 


    if (item) { 
     // DATA SHOULD BE POPULATED HERE, but no effect 
     ko.mapping.fromJS(item, this); 
    }; 
}; 

var model = new RiskItemModel(data); 
ko.applyBindings(model); 

// I HAVE TRIED THIS ALSO, NO EFFECT 
//ko.mapping.fromJS(data, model); 

HTML:

<div> 
    <pre data-bind="text: ko.toJSON($data, null, 2)"></pre> 
</div> 

JSFidde: http://jsfiddle.net/wLbV6/

ответ

6

Вы не используете правильную перегрузку функции ko.mapping.fromJS.

Вам нужно написать:

ko.mapping.fromJS(item, {} /* mapping options */, this); 

Demo JSFiddle.

ko.mapping.fromJS Функция работает только с двумя параметрами, если второй параметр является объектом, который уже был нанесен плагином, поэтому он имеет свойство "__ko_mapping__".

Подробнее о различных перегрузках можно получить здесь: Unable to parse bindings js error using ko.mapping.fromJSON with parse exist view model