2013-07-24 2 views
0

У меня есть эта модель просмотра, на моем веб-сайте У меня выпадающий список, который обновляет параметр sortedallemployees. Он отлично работает, за исключением того, что изначально мой стол пуст. Как только я сортирую первый раз, когда получаю данные. Похоже, что когда создается vm, он не ждет, когда будут заполнены allemployees.нокаутом вычисленная зависимость пуста первоначально

var vm = { 
    activate: activate, 
    allemployees: allemployees, 
    sortedallemployees:ko.computed({ 
    return allemployees.sort(function(f,s) { 
    var ID = SelectedOptionID(); 
    var name = options[ ID - 1].OptionText; 
     if (f[name] == s[name]) { 
      return f[name] > s[name] ? 1 : f[name] < s[name] ? -1 : 0; 
      } 
      return f[name] > s[name] ? 1 : -1; 

      }); 

}

ответ

1

Без остальной части кода, его трудно точно сказать, как это будет вести себя. При этом вы делаете несколько очень странных вещей, которые я бы рекомендовал вам избежать.

Во-первых, определение всех, кроме простейших режимов просмотра в качестве объектных литералов, вызовет у вас боль. Все, что имеет функцию или вычисленное, почти наверняка будет вести себя странно или, скорее всего, совсем не так, если будет определено так.

Я бы рекомендовал использовать функцию-конструктор для ваших моделей просмотра.

var Viewmodel = function(activate, allEmployees) { 
    var self = this; 
    self.activate = activate; 
    self.allEmployees = ko.observableArray(allEmployees); 
    self.sortedEmployees = ko.computed(function() { 
     return self.allEmployees().sort(function(f,s) { 
      //your sort function 
     }); 
    }); 
}; 

var vm = new Viewmodel(activate, allemployees); 

Этот метод имеет ряд преимуществ. Во-первых, он многоразовый. Во-вторых, вы можете правильно ссылаться на свои свойства во время строительства, например, во время определения computed. Необходимо вычислить ссылку, по крайней мере, наблюдаемое свойство во время определения, чтобы оно было реактивным.

Ваша следующая проблема заключается в том, что вычисленное определение не является функцией, а объектом. Это даже не юридический объект, у него есть возврат. Этот код даже не компилируется. Это просто неправильно. На этом этапе ясно, что Knockout Documentation: вычислено с помощью function.

Ваша последняя проблема заключается в том, что ваша функция сортировки ссылается на вещи вне модели просмотра: SelectedOptionID(). Это не обязательно остановит его от работы, но в целом это плохая практика.

+0

ok Я, должно быть, удалил функцию при форматировании. sortedallemployees: ko.computed (function() { return ko.computed (function() {return allemployees.sort – user1167777

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