2013-06-05 3 views
0

У меня сумасшедшая проблема с моим кодом. Я пытаюсь реализовать this jsfiddle codeСтранная проблема с привязкой данных

В моем коде, но у меня нет успеха. Вот что я сделал:

ViewModel:

viewModelInbox = function(){ 
        query: ko.observable(''); 
        var checked = false, 
        mainData = ko.observableArray([]), 
        showView = ko.observable(), 
        currentView = ko.observable(), 
        approve = function(){ 
        }, 

        disapprove = function(){}, 
        toggle = function() { 
         if(checked){ 
          $.each(mainData(), function(){ 
           this.checkB(false); 
          }); 
          checked = false; 
          return; 
         } 
         if(!checked){ 
          $.each(mainData(), function(){ 
           this.checkB(true); 
          }); 
          checked = true; 
          return; 
         } 
        }; 

        viewModelInbox.mainData = ko.dependentObservable(function() { 
        var search = this.query().toLowerCase(); 
        return ko.utils.arrayFilter(viewModelInbox, function(test) { 
         return test.name.toLowerCase().indexOf(search) >= 0; 
        }); 

       }, viewModelInbox); 
        return { 
         mainData: mainData, 
         showView: showView, 
         currentView: currentView, 
         approve: approve, 
         disapprove: disapprove, 
         toggle: toggle 
        }; 

       }, 

mainData наблюдаемого массив держат некоторые значения, как имя, код, дата и т.д.

Проблема у меня есть, что я «получаю эту ошибку:

TypeError: this.query is not a function 

var search = this.query().toLowerCase(); 

Я уверен, что я что-то на самом деле небольшой отсутствует, но, как я полный п oob in knockoutjs Я не могу это заметить.

ответ

1

Кажется, это не что-то маленькое.

Ваше мнение модель должна быть

var ViewModel = function() { 
    this.query = ko.observable(''); // use ';' 
    this.mainData = ko.observableArray([]); 
}; 

или

var viewModel = { 
    query: ko.observable(''), // use ',' 
    mainData: ko.observableArray([]) 
}; 

Вы не можете смешивать их.

+0

Я использую 2-ю структуру, но запятая (,), кажется, не работает. Он просит (;) вместо него. : s – Slim

+1

, если вы используете 2-ю структуру, вы должны удалить «функцию» и использовать «:» вместо «=», –

1

Или вы можете написать так:

var ViewModelInbox = function() { 
    var self = this; 

    self.query = ko.observable(''); 

    self.dataSource = []; // data source 

    self.mainData = ko.computed(function() { 
     var search = self.query().toLowerCase(); 
     return ko.utils.arrayFilter(self.dataSource, function(item) { 
      return item.name.toLowerCase().indexOf(search) >= 0; 
     }); 
    }); 

    self.showView = ko.observable(); 
    self.currentView = ko.observable(); 

    self.approve = function() { 

    }; 

    self.disapprove = function() { 

    }; 

    self.checked = ko.observable(true); 

    self.toggle = function() { 
     var toCheck = !self.checked(); 
     ko.arrayForEach(self.mainData(), function(data) { 
      data.checkB(toCheck); 
     }); 
     self.checked(toCheck); 
    }; 
}; 

ko.applyBindings(new ViewModelInbox()); 
Смежные вопросы