2015-05-15 2 views
0

Существует нокаута модель:Нокаут добавление новых свойств уже существующего вида модели

var customMapping = { 
    update: function (options) { 
     var result = ko.mapping.fromJS(options.data); 
      var self = this; 
      self.computeTest = ko.computed(function() { 
       return "Test" + self.newObs(); 
      }); 

     return result; 
    } 
}; 

var model = function() 
{ 
    var self = this; 
    self.Test = ko.observable(); 

    self.init = function() { 
     // create ajax call 
     // in success do mapping 
     ko.mapping.fromJS(data, customMapping, self); //this mapping should update existing model - adding new observables and computed 
    } 

    ko.applyBindings(self, $("#id")[0]); 
} 

var m = new model(); 
m.init(); 

Итак: 1) У меня есть нокаутирующий модель. В нем определены некоторые функции, а также список наблюдаемых.

2) Связывание Knocokut вызывается до того, как данные поступают с сервера.

3) Данные модели загружаются с использованием m.init().

Это должно вызывать пользовательское сопоставление и создавать новые наблюдаемые данные (на основе данных с сервера), а также некоторые вычисленные переменные. Однако это настраиваемое связывание не работает. Он не создает никаких новых наблюдаемых. Я считаю, что это должно быть «обновление» отображение, но я не понимаю, как я могу продлить внутри него существующую модель

ответ

1

Учитывая ваш код есть на самом деле, возможно, ярлык доступны: переместить ko.applyBindings вызов метода init, прямо ниже mapping звонок.

В противном случае вам понадобится использовать заполнитель/пустой/поддельный результат Ajax для подключения модели «по умолчанию».

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