Question

I am creating an application with durandal, which means I'm using requirejs. I decided to use the mighty knockout-sortable plugin. As it turns out, it uses jquery-ui features internally, which is nice. I also have defined the whole jquery-ui package in my app, so in my requirejs configuration it figures as

"jqueryui": "../Scripts/jquery-ui-1.10.3.custom",

What is more, the plugins author is using AMD loading to get jquery.ui.sortable, and here's the problem. The jquery-ui doesn't seem to define itself with requirejs, neither the whole package nor single modules.

Do I have to import any module from jquery-ui separately and for each define path in requirejs config so it is explicitly visible or is there a way to tell requirejs that there's already this jquery.ui.sortable module around inside jquery-ui that the plugin is asking for?

Was it helpful?

Solution

You should be able to setup a simple alias either using a path requirejs config

paths: {
  'jquery.ui.sortable': 'jquery-ui'
}

Or if that doesn't work, you could use the map config

map: {
  '*': {
    'jquery.ui.sortable': 'jquery-ui'
  }
}

Or when using map, you could even only setup alias for that one plugin

map: {
  'THE-JQUERY-UI-PLUGIN-ID': {
    'jquery.ui.sortable': 'jquery-ui'
  }
}

That last one makes it so that whevener the plugin in question makes a require("jquery.ui.sortable") call it actually pulls in jquery-ui module which you know has the sortable functionality built in already.

There also exists a jquery-ui-amd project which I quite like using. That project converts all jquery-ui modules into individual AMD modules https://github.com/jrburke/jqueryui-amd. You could use that for an easier and more modular integration into your project. However, even then you would need some aliasing as your plugin requires jquery.ui.sortable, but in jquery-ui-amd the id would be jquery-ui/sortable.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top