Qt Quick Underscore.js

From Qt Wiki
Revision as of 10:55, 24 February 2015 by Maintenance script (talk | contribs)
Jump to navigation Jump to search

h1. Using Underscore.js library in Qt Quick

Underscore is a JavaScript library that provides a whole mess of useful functional programming helpers without extending any built-in objects.
(http://underscorejs.org/)

Unfortunately you cannot just import Underscore like:

import &quot;underscore.js&amp;quot; as Underscore<code><br />due &quot;immutable root object&amp;quot;:http://doc.qt.io/qt-5/qtqml-javascript-hostenvironment.html#javascript-environment-restrictions

The workaround is to modify ''underscore.js'' so that it returned underscore object via special ''init'' function.

This is a diff output for Underscore.js version 1.4.4:<br />


1,2c1,4
< // Underscore.js 1.4.4
< // =

--- &gt; // Underscore.js 1.4.4 &gt; // http://underscorejs.org &gt; // (c) 2009-2013 Jeremy Ashkenas, DocumentCloud Inc. &gt; // Underscore may be freely distributed under the MIT license. 4,10c6,9 &lt; // &gt; http://underscorejs.org &lt; // &gt; (c) 2009-2013 Jeremy Ashkenas, DocumentCloud Inc. &lt; // &gt; Underscore may be freely distributed under the MIT license. &lt; &lt; // Baseline setup &lt; // -------------- &lt; var init = function() &#123; --- &gt; (function() &#123; &gt; &gt; // Baseline setup &gt; // -------------- 58,65c57,64 &lt; // if (typeof exports ! 'undefined') {
< // if (typeof module ! &#39;undefined&#39; &amp;&amp; module.exports) &#123; &lt; // exports = module.exports = _; &lt; // &#125; &lt; // exports._ = _; &lt; // &#125; else &#123; &lt; // root._ = _; &lt; // &#125; ---

&gt; if (typeof exports ! 'undefined') {
> if (typeof module !== 'undefined' && module.exports) {
> exports = module.exports = ;
> }
> exports.
= ;
> } else {
> root.
= ;
> }
1227,1228c1226
< return
;
< }

> }).call(this);

Now you can use it in your project:<br />


import "underscore.js&quot; as Underscore
// …
property var _: Underscore.init();

Drawback of this approach is the following warning in application console: