Version problems with deprecated methods on my Breeze scripts
Asked Answered
E

2

8

When trying to implement the session part in the tutorial of John Papa Pluralsight Video. I got the following error:

Uncaught TypeError: Object # has no method 'extendQ'

(function () {
    'use strict';

    var app = angular.module('app', [
        // Angular modules 
        'ngAnimate',        // animations
        'ngRoute',          // routing
        'ngSanitize',       // sanitizes html bindings (ex: sidebar.js)

        // Custom modules 
        'common',           // common functions, logger, spinner
        'common.bootstrap', // bootstrap dialog wrapper functions

        // 3rd Party Modules
        'ui.bootstrap',      // ui-bootstrap (ex: carousel, pagination, dialog)
        //'breeze.angular.q'
    ]);

    // Handle routing errors and success events
    app.run(['$route', '$rootScope', '$q', function ($route, $rootScope, $q) {
        // Include $route to kick start the router.
        breeze.core.extendQ($rootScope, $q);
        //use$q($rootScope,$q);

    }]);        
})();

It's important to know that the version of breeze that I'm working on is newer than the used on the original video.

I search for some answers on the breeze website and I've found this:

The to$q has been deprecated. It is superseded by the Breeze Angular Service.

But I didn't make it work on the tutorial example. How to change the deprecated implementation with the new one?

UPDATE:

this link helped solve the problem:

http://www.breezejs.com/documentation/breeze-angular-service

Expectorant answered 1/3, 2014 at 18:51 Comment(0)
D
6

The breeze library was updated and the answer is on this link: http://www.breezejs.com/documentation/breeze-angular-service

Specifically this code from the bottom of the post:

Migration is pretty painless.

  1. Remove the breeze.angular.q.js script from your project.
  2. Uninstall-Package Breeze.Angular.Q if you used NuGet.
  3. Install breeze.angular.js as explained above.
  4. Update your index.html, changing breeze.angular.q.js to breeze.angular.js.
  5. Update your app module to depend on "breeze.angular".
  6. Find the one place in your code where you call "use$q" and replace it with the "breeze" dependency.

For example, you might go from this:

var app = angular.module('app', [
   // ... other dependencies ...
   'breeze.angular.q' // tells breeze to use $q instead of Q.js
]);

app.run(['$q','use$q', function ($q, use$q) {
       use$q($q);
}]);

to this:

var app = angular.module('app', [
   // ... other dependencies ...
   'breeze.angular'
]);

app.run(['breeze', function () { }]);

You should also track down and eliminate code that configures Breeze to use the "backingStore" model library adapter and $http. For example, you could go from this:

function configBreeze($q, $http, use$q) {
    // use $q for promises
    use$q($q);

    // use the current module's $http for ajax calls
    var ajax = breeze.config.initializeAdapterInstance('ajax', 'angular');
    ajax.setHttp($http);

    // the native Breeze 'backingStore' works for Angular
    breeze.config.initializeAdapterInstance('modelLibrary', 'backingStore', true);

    breeze.NamingConvention.camelCase.setAsDefault();
}

to this:

function configBreeze() {
    breeze.NamingConvention.camelCase.setAsDefault();
Dibromide answered 13/3, 2014 at 0:13 Comment(2)
Thank you for this! I was able to solve the same error while following along with your video.Belak
Hehehe... just got here while getting rid of that breeze.to$q.shim.js.Eastereasterday
E
4

While taking the same course by John Papa I also hit breeze.core.extendQ not available on step 4.10.

This is what I did to solve the issue:

1 - In app.js pass breeze dependency directly:

// Handle routing errors and success events
// Trigger breeze configuration
app.run(['$route', 'breeze', function($route, breeze)
{
    // Include $route to kick start the router.
}]);

2 - In datacontext.js do:

return EntityQuery.from('Sessions')
    .select('id, title, code, speakerId, trackId, timeSlotId, roomId, level, tags')
    .orderBy(orderBy)
    .toType('Session')
    .using(manager).execute()
    .then(querySucceeded, _queryFailed);

You can also get rid of breeze.to$q.shim.js from index.html and delete the file from the \Scripts folder in the project since it's not needed anymore.


Here's the updated source code of the same project I'm doing now [ including the fixes ].

Eastereasterday answered 14/5, 2014 at 6:13 Comment(2)
brilliant, thanks very much this note and the excellent repo on which you've added all the updates. Priceless work!Mcalister
This solution did't work for me. I tried John Papa's solution and it works.Somnambulate

© 2022 - 2024 — McMap. All rights reserved.