javascript - How to load KnockoutJS custom functions with RequireJS? -
i have view model uses custom observablearray function sorting. when try run says: "...has no methods 'sortbyproperty'".
how should load handlers.js file make work?
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(); // field sort self.sortorder = ko.observable(); // sort order. asc or desc. // returns labels current page self.pagedrows = ko.computed(function() { // sorts labels return self.availablelabels.sortbyproperty(self.sortby(), self.sortorder()); }); }; return labelsmodel; });
you have first make sure knockoutjs defined, load plugins, , launch application. think how plugins libraries should loaded. here how can it:
require.config({ paths: { jquery: 'libs/jquery-1.9.0.min', ko: 'libs/knockout-2.2.1.min' } }); require(['jquery', 'ko'], function($, ko) { // ensure ko in global namespace ('this') if (!this.ko) { this.ko = ko; }; requirejs(['handlers'], function () { require(['app'], function(app) { app.initialize(); } ); } ); } ); i had lot more libraries cut down bit jquery , knockoutjs, you:
- declare libraries
- require loading them
- require loading plugins libraries, here handlers knockoutjs
- load app (conveniently named... 'app' here :-). should initialize view models , bind them dom elements. point libraries , plugins have been loaded.
Comments
Post a Comment