2013-05-15 22 views
6

Tôi có Mô hình xem sử dụng chức năng quan sát tùy chỉnhArray để sắp xếp. Khi tôi cố gắng chạy nó, nó nói: "... không có phương thức 'sortByProperty'".Làm thế nào để tải các chức năng tùy chỉnh KnockoutJS với RequireJS?

Tôi nên tải tệp handlers.js như thế nào để thực hiện công việc này?

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:

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; 

    }); 

Trả lời

1

Bạn phải trước tiên hãy chắc chắn KnockoutJS được xác định, sau đó tải các plug-in, và cuối cùng là khởi động ứng dụng của bạn . Điều này tôi nghĩ là làm thế nào tất cả các plugin cho các thư viện nên được nạp. Đây là cách bạn có thể làm điều đó:

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(); 
        } 
       ); 
      } 
     ); 
    } 
); 

Tôi có rất nhiều thư viện vì vậy tôi cắt nó xuống một chút chỉ để JQuery và KnockoutJS, nhưng về cơ bản bạn:

  1. khai báo nơi thư viện của bạn
  2. yêu cầu tải chúng
  3. yêu cầu tải plugin cho thư viện của bạn, tại đây trình xử lý cho KnockoutJS
  4. tải ứng dụng của bạn (tên tiện dụng ... 'ứng dụng' tại đây :-). Đây là nơi bạn nên khởi tạo các mô hình khung nhìn của mình và liên kết chúng với các phần tử DOM. Đây có thể là điểm mà tất cả các thư viện và plugin đã được tải.
+0

Cảm ơn. Tải nó với requirejs đã làm các trick. – Sindre

+0

@Sindre nice! Cảm ơn và chúc may mắn ! – Jalayn

+0

Bạn không cần phải làm cho nó toàn cầu cho kịch bản cụ thể của bạn. Có vẻ như mẫu ban đầu của bạn sẽ hoạt động bình thường. Đó là cách tôi tải tiện ích mở rộng. –

Các vấn đề liên quan