Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Working with breeze and requireJS

So there have been similar questions floating around, but I am hoping to get an up-to-date answer on this.

Versions-

breeze: 1.4.0 Knockout: 2.2.1 RequireJS: 2.1.5

I am trying to load breeze in a requireJS project with knockoutJS. Our requireJS config is very simple-

  require.config({
    waitSeconds: 15,
    paths: {

        'templates': "/ist-common/templates",
        'lib': '/ist-common/js/lib',
        'ist': '/ist-common/js/ist'
    }

});

So I loaded the breeze libs into the following directory structure-

lib
---->q.js
---->breeze.debug.js

I am trying to define a "dataservice" module to use breeze and set it up like so-

define(['lib/knockout', 'lib/q', 'lib/breeze.debug'], function (ko, Q, breeze) {


    var serviceName = '/ist/rest'; // route to the endpoint

    var manager = new breeze.EntityManager(serviceName);
    manager.enableSaveQueuing(true);


    var query = new EntityQuery("missions");
    manager.executeQuery(query, function(data) {

        console.log("success");

    });


});

Is this configuration possible? I am trying to keep my scripts tags down to a minimum and load only requireJS and then load knockout, jquery etc. as I need them inside my module definitions.

This config currently fails with a message-

Error: Unable to initialize Q. See https://github.com/kriskowal/q

EDIT*

I was able to get it to load Q with the following config for require, however this feels wrong. Why should I be setting window.Q? Shouldn't I be able to access Q as a named module?

 var require = {
    waitSeconds: 15,
    deps: ["/ist-common/js/lib/q.js"],
    callback: function(Q){
        window.Q = Q;
    },
    paths: {

        'templates': "/ist-common/templates",
        'lib': '/ist-common/js/lib',
        'ist': '/ist-common/js/ist'
    }

};
like image 574
thebringking Avatar asked Jan 01 '26 04:01

thebringking


1 Answers

You also need a shim for breeze (from Using Angular with breeze and require)

breeze: {
    deps: ['ko', 'jquery', 'Q']
},

This is required because although breeze does define itself it does not define its dependencies, it just expects them to be there (RequireJs cant interpret it's dependancies in a variable instead of a string?).

The shim is also required because breeze requests 'jQuery' but the jQuery code defines itself as 'jquery'

like image 88
RockResolve Avatar answered Jan 02 '26 17:01

RockResolve



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!