2014-03-01 20 views
8

Beim Versuch, den Sitzungsteil im Tutorial von John Papa Pluralsight Video zu implementieren. Ich habe folgende Fehlermeldung:Versionsprobleme mit veralteten Methoden in meinen Breeze-Skripten

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); 

    }]);   
})(); 

Es ist wichtig zu wissen, dass die Version der Brise, die ich arbeite an neuer ist als die auf dem Original-Video verwendet.

Ich suche nach Antworten auf den breeze website und ich habe dies gefunden:

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

Aber ich habe es nicht auf dem Tutorial Beispiel arbeiten zu lassen. Wie ändere ich die veraltete Implementierung mit der neuen?

UPDATE:

Link das Problem geholfen lösen:

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

Antwort

6

Die Brise Bibliothek wurde aktualisiert und ist die Antwort auf diesen Link: http://www.breezejs.com/documentation/breeze-angular-service

Insbesondere dieser Code von unten der Pfosten:

Migration ist ziemlich schmerzlos.

  1. das breeze.angular.q.js Skript aus Ihrem Projekt entfernen.
  2. Deinstallieren-Paket Breeze.Angular.Q wenn du NuGet benutzt hast.
  3. Installieren Sie breeze.angular.js wie oben beschrieben.
  4. Aktualisieren Sie Ihre index.html, indem Sie breeze.angular.q.js in breeze.angular.js ändern.
  5. Aktualisieren Sie Ihr App-Modul abhängig von "breeze.angular".
  6. Suchen Sie die Stelle in Ihrem Code, an der Sie "use $ q" aufrufen und durch die Abhängigkeit "breeze" ersetzen.

Zum Beispiel könnten Sie von diesem gehen:

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); 
}]); 

dazu:

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

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

Sie sollten auch aufzuspüren und Code zu beseitigen, die Breeze die "Backings" Modell zu verwenden, konfiguriert Bibliotheksadapter und $ http. Zum Beispiel könnten Sie von diesem gehen:

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(); 
} 

dazu:

function configBreeze() { 
    breeze.NamingConvention.camelCase.setAsDefault(); 
+2

Vielen Dank dafür! Ich konnte denselben Fehler beheben, während ich gleichzeitig mit deinem Video mitgehe. – tympaniplayer

+0

Hehehe ... bin gerade hergekommen, während ich diese "Brise.zu $ q.shim.js" losgeworden bin. –

4

Während the same course von John Papa nehmen auch traf ich breeze.core.extendQ nicht auf Schritt 4.10.

Dies ist, was ich das Problem zu lösen hat:

1 - In app.js Pass breeze Abhängigkeit direkt:

// 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 tun:

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

Sie können auch loswerden von breeze.to $ q.shim.js von index.html und löschen Sie die Datei aus dem \Scripts Ordner im Projekt ct, da es nicht mehr benötigt wird.


Hier ist die updated source code des gleichen Projektes ich jetzt tue [einschließlich der Korrekturen].

+1

brilliant, vielen Dank diese Notiz und das ausgezeichnete Repo, auf dem Sie alle Updates hinzugefügt haben. Unbezahlbare Arbeit! – JSancho

+0

Diese Lösung hat nicht für mich funktioniert. Ich habe John Papas Lösung versucht und es funktioniert. – ATHER