2013-05-15 17 views
6

Sıralama için özel bir observableArray işlevini kullanan bir Görünüm Modelim var. Bunu çalıştırmaya çalıştığımda şöyle diyor: "... 'sortByProperty' yöntemine sahip değil."KnockoutJS özel işlevleri RequireJS ile nasıl yüklenir?

Bunu yapmak için handlers.js dosyasını nasıl yüklemeliyim?

handlers.js:

define(['knockout'], function(ko) { 
     'use strict'; 

     ko.observableArray.fn.sortByProperty = function (prop, order) { 
      this.sort(function (obj1, obj2) { 
       var result; 
       if (obj1[prop] == obj2[prop]) 
        result = 0; 
       else if (obj1[prop] < obj2[prop]) 
        result = -1; 
       else 
        result = 1; 

       return order === "desc" ? -result : result; 
      }); 
     }; 

    }); 

viewmodel.js: Önce tanımlanır emin KnockoutJS yapmak zorunda

define([ 
     'knockout', 
     'js/extends/handlers' 
    ], function(ko) { 
     'use strict'; 

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

      self.availableLabels = ko.observableArray(); 
      self.selectedLabel = ko.observable(); 
      self.sortBy = ko.observable(); // What field to sort by 
      self.sortOrder = ko.observable(); // Sort order. asc or desc. 

      // Returns the labels for the current page 
      self.pagedRows = ko.computed(function() { 
       // Sorts the labels 
       return self.availableLabels.sortByProperty(self.sortBy(), self.sortOrder()); 
      }); 

     }; 

     return LabelsModel; 

    }); 

cevap

1

ardından eklentileri yüklemek ve nihayet uygulamayı başlatmak . Bu bence kütüphaneler için tüm eklentiler nasıl yüklenmelidir. Burada bunu nasıl geçerli:

require.config({ 
     paths: { 
     jquery: 'libs/jquery-1.9.0.min', 
     ko: 'libs/knockout-2.2.1.min' 
    } 
}); 

require(['jquery', 'ko'], 
    function($, ko) { 
     // ensure KO is in the global namespace ('this') 
     if (!this.ko) { 
      this.ko = ko; 
     }; 

     requirejs(['handlers'], 
      function() { 
       require(['app'], 
        function(App) { 
         App.initialize(); 
        } 
       ); 
      } 
     ); 
    } 
); 

Ben sadece JQuery ve KnockoutJS için biraz kısmak böylece çok daha fazla kütüphaneleri vardı, ama temelde:

  1. beyan nerede kütüphaneleri
  2. :-) burada ...
  3. elverişli adlı
  4. uygulamanızı yüklemek KnockoutJS (burada sizin kütüphaneler için işleyicileri eklentileri yükleme gerektirir 'uygulamasını' yükleyerek gerektirir. Bu, görünüm modellerinizi ilklendirmeniz ve DOM öğelerine bağlamanız gereken yerdir. Bu büyük olasılıkla tüm kütüphanelerin ve eklentilerin yüklü olduğu nokta.
+0

Teşekkürler. Gereksinimlerle yüklendi. – Sindre

+0

@Sindre nice! Teşekkürler ve iyi şanslar ! – Jalayn

+0

Özel senaryonuz için global hale getirilmemelisiniz. Orijinal örneğinizin düzgün çalışması gerektiği gibi görünüyor. Uzantıları yükleme şeklim budur. –