2014-09-03 6 views
4

Я пытаюсь продвигаться вперед с пользовательскими компонентами в нокауте 3.2. Все работает хорошо, если я использую предопределенные параметры. Например, это jsFiddle.Невозможно передать переменные с пользовательскими компонентами в нокауте 3.2

Но когда я передаю параметры из моей модели просмотра (я прочитал, как это сделать here) Я ничего не получаю: jsFiddle. Что я делаю не так?

Вот мой JS код:

ko.components.register('pagination', { 
    viewModel: function (params) { 
     var self = this; 
     this.page = ko.observable(params.page); 
     this.max = ko.observable(params.max); 

     this.list = ko.pureComputed(function() { 
      var a = self.page(), 
       list = [], 
       min = a - 2 < 1 ? 1 : a - 2, 
       max = a + 2 > self.max() ? self.max() : a + 2; 

      for (var i = min; i <= max; i++) { 
       list.push(i); 
      } 
      return ko.observableArray(list); 
     }); 

     this.callback = function (i) { 
      console.log(i); 
      self.page(i); 
     }; 
    }, 
    template: { 
     element: 'pagination-tpl' 
    } 
}); 

function Vm(){ 
    this.page = ko.observable(2); 
    this.max = ko.observable(6); 
} 
var vm = new Vm(); 

ko.applyBindings(vm, document.getElementById('koBinding_somePage')); 

ответ

7

linked article объясняет такое поведение Int он Как PARAMS передаются в компонент раздел:

Если параметр создает сам зависимостей (получает доступ к значение наблюдаемого или вычисленного), то компонент получит вычисленное значение, которое возвращает значение.

Так что в вашем случае params.page и params.max содержат вычисленный Наблюдаемое свойство, а не значение.

Так что вам просто нужно назначить их локальных полей:

viewModel: function (params) { 
     var self = this; 
     this.page = params.page; 
     this.max = params.max; 
     //... 
} 

Demo JSFiddle.