2015-03-15 6 views
6

गठबंधन करने की कोशिश की है, मैं उन तकनीकों को गठबंधन करने की कोशिश कर रहा हूं, लेकिन कुछ भी अच्छा नहीं आता है, क्योंकि इकाई फ्रेमवर्क मेटा-डेटा नहीं करता है wind.js से भस्म हो जाओ, यहां तक ​​कि सभी विन्यास जहां सेटअप, यह थोड़ा मुश्किल स्थिति है, सचमुच इसका कोई उदाहरण नहीं है, इसलिए यह मेरा नमूना कोड है जो ठीक से काम नहीं करता है, लेकिन किसी भी तरह से किसी को मेरी गलती मिल जाएगी और अंत में इस पहेली को हल करने में मदद करें या इसे शुरुआती बिंदु के रूप में मिलेगा।क्या कोई AngularJS + ASP.NET-WebApi + OData + Breeze.js + टाइपस्क्रिप्ट उदाहरण हैं या किसी ने उन

OdataService.ts

'use strict'; 
module twine.components { 
    class MetadataStoreOptions implements breeze.MetadataStoreOptions{ 
    namingConvention:breeze.NamingConvention = breeze.NamingConvention.defaultInstance; 
    } 
    class Manager implements breeze.EntityManagerOptions { 
    metadataStore: breeze.MetadataStore; 
    constructor(public dataService: breeze.DataService) { 
    } 
    } 
    class DataServiceOptions implements breeze.DataServiceOptions { 
    serviceName = 'http://twine.azurewebsites.net/odata'; 
    hasServerMetadata = true; 
    } 
    export class ODataService { 
    options: Manager; 
    manager: breeze.EntityManager; 
    metadataStore: breeze.MetadataStore; 
    storeOptions: MetadataStoreOptions; 
    static $inject: string[] = ['$http', '$rootScope']; 
    cache: twine.Model.IEntity[]; 

    constructor(private $http: ng.IHttpService, private $rootScope: ng.IRootScopeService){ 
     this.storeOptions = new MetadataStoreOptions(); 
     this.metadataStore = new breeze.MetadataStore(this.storeOptions); 
     this.options = new Manager(new breeze.DataService(new DataServiceOptions())); 
     this.options.metadataStore = this.metadataStore; 
     this.manager = new breeze.EntityManager(this.options); 
     breeze.config.initializeAdapterInstance('dataService', 'webApiOData', true); 
     //this.manager.fetchMetadata((meta) => { 
     // this.metadataStore.importMetadata(meta); 
     //}); 
    } 

    All(query:breeze.EntityQuery, successCallback: Function, failCallback?: Function): void { 
     this.manager.executeQuery(query) 
     .then((data: breeze.QueryResult) => { 
      successCallback(data); 
      this.$rootScope.$apply(); 
     }) 
     .catch((reason: any) => { 
      if (failCallback) { 
      failCallback(reason); 
      } 
     }); 
    } 
    Get(key:number, successCallback: Function, failCallback?: Function): void { 
     //this.manager.fetchMetadata(); 
     //var entityType = this.manager.metadataStore.getEntityType('Tag'); 
     //var entityKey = new breeze.EntityKey(entityType, key); 
     this.manager.fetchEntityByKey('Tag', key) 
     .then((data: breeze.EntityByKeyResult) => { 
      successCallback(data); 
      this.$rootScope.$apply(); 
     }) 
     .catch((reason: any) => { 
      if (failCallback) { 
      failCallback(reason); 
      } 
     }); 
    } 
    } 
} 

और यह tagController.ts

है
'use strict'; 
module twine.routes { 
    interface ITagsScope extends ng.IScope { 
    vm: TagsCtrl; 
    } 
    interface ITagsCtrl extends twine.components.ITwineRoute{ 
    tags:any[]; 
    getTags:() => void; 
    tag: any[]; 
    getTag: (id:number) => void; 
    } 
    export class TagsCtrl implements ITagsCtrl{ 
    /* @ngInject */ 
    static controllerId: string = 'TagsController'; 
    static controllerAsId: string = 'tagsCtrl'; 
    static $inject: string[] = ["$scope", "ODataService", '$route']; 
    entityQueryName: string = 'Tag'; 
    query: breeze.EntityQuery; 
    tags:any; 
    tag: any; 
    constructor (private $scope: ITagsScope, private ODataService: twine.components.ODataService, $route: ng.route.IRouteService) { 
     this.query = new breeze.EntityQuery(this.entityQueryName); 
     if($route.current && $route.current.params.id){ 
     this.getTag($route.current.params.id); 
     } 
     else { 
     this.getTags(); 
     } 
    } 
    getTags() { 
     this.ODataService.All(this.query , (data) => { 
     this.tags = data.results[0].value; 
     }, (error) => { 
     console.log('error', error); 
     }); 
    } 
    getTag(id:number){ 
     this.ODataService.Get(id , (data) => { 
     this.tag = data.results[0].value; 
     }, (error) => { 
     console.log('error', error); 
     }); 
    } 
    } 
} 

कई त्रुटियों, अलग विन्यास पर हैं, कभी कभी यह There is no resourceName for this query या EntityKey must be set, या Other stupid errors है जो वास्तव में नहीं हैं करता है दिखाना है क्योंकि यह एक टाइपस्क्रिप्ट है जो प्रकार के विसंगतियों की अनुमति नहीं देता है, लेकिन कॉन्फ़िगरेशन स्वयं सही नहीं है।

और यह सार नियंत्रक

[EnableCors(origins: "*", headers: "*", methods: "*")] 
public abstract class EntityController<T> : ODataController where T: Entity 
{ 
    protected ODataRepository<T> repo = new ODataRepository<T>(); 
    private static ODataValidationSettings _validationSettings = new ODataValidationSettings(); 
    public EntityController() 
    { 

    } 
    // GET: odata/Entity 
    [EnableQuery] 
    public IQueryable<T> Get(ODataQueryOptions<T> queryOptions) 
    { 
     try 
     { 
      queryOptions.Validate(_validationSettings); 
     } 
     catch (ODataException ex) 
     { 
      Trace.WriteLine(ex.Message); 
      return null; 
     } 
     return repo.All(); 
    } 

    // GET: odata/Entity(5) 
    [EnableQuery] 
    public SingleResult<T> Get([FromODataUri] long key, ODataQueryOptions<T> queryOptions) 
    { 
     try 
     { 
      queryOptions.Validate(_validationSettings); 
     } 
     catch (ODataException ex) 
     { 
      Trace.WriteLine(ex.Message); 
      return null; 
     } 
     return SingleResult.Create(repo.All().Where(x=>x._id == key)); 
    } 
    //ommitted 
} 

है और अंत में इस ASP.NET WebAPI विन्यास

public static class WebApiConfig 
{ 
    public static void Register(HttpConfiguration config) 
    { 
     // Конфигурация и службы веб-API 
     config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html")); 

     // Маршруты веб-API 
     config.MapHttpAttributeRoutes(); 

     config.Routes.MapHttpRoute(
      name: "DefaultApi", 
      routeTemplate: "api/{controller}/{id}", 
      defaults: new { id = RouteParameter.Optional } 
     ); 

     //CORS 
     var cors = new EnableCorsAttribute(
      "*", 
      "*", 
      "*", 
      "DataServiceVersion, MaxDataServiceVersion" 
     ); 
     config.EnableCors(cors); 

     // Маршруты Odata 
     //config.EnableQuerySupport(); 
     config.AddODataQueryFilter(); 

     Builder<Account>(config); 
     Builder<Branch>(config); 
     Builder<Bucket>(config); 
     Builder<Ingredient>(config); 
     Builder<Like>(config); 
     Builder<Meetup>(config); 
     Builder<Shot>(config); 
     Builder<Skill>(config); 
     Builder<Tag>(config); 
     Builder<Team>(config); 
    } 
    private static void Builder<T>(HttpConfiguration config) where T: class 
    { 
     var entityType = Activator.CreateInstance<T>().GetType(); 
     if (entityType != null) 
     { 
      var builder = new ODataConventionModelBuilder(); 
      builder.EntitySet<T>(entityType.Name); 
      config.Routes.MapODataServiceRoute("odata_" + entityType.Name, "odata", builder.GetEdmModel()); 
     } 

    } 
} 

है परीक्षण प्रयोजन के लिए मैं http://twine.azurewebsites.net/odata/Tag पर इस काम कर समर्थन किया OData सेवा, (वर्तमान में से कोई प्रतिबंध नहीं है सीओआरएस, नि: शुल्क महसूस करें) अंतिम इकाई को वेब एपीआई कॉन्फ़िगरेशन Build विधि के आधार पर अन्य नाम में बदला जा सकता है। किसी भी अन्य जानकारी पूछने के लिए स्वतंत्र महसूस करें। किसी को पूरे स्रोत की जरूरत है, GitHub

अद्यतन

Mension को भूल जाओ पर प्रकाशित करने के लिए तैयार im, समस्या ODataService की विधि Get में है। मैं सर्वर से हवा में मेटाडेटा को बाध्य नहीं कर सकता, विधि सभी ठीक काम करता है। लेकिन fetchByEntityKey

+0

वहाँ कोड का एक बहुत कुछ है, और यह देखने के लिए कि क्या वास्तविक सवाल यह है कि मुश्किल है। – Claies

+0

कॉन्फ़िगरेशन भाग 'OdataService.ts', हवा को कॉन्फ़िगर कैसे करें? दस्तावेज़ीकरण के अनुसार, मेरा सेटअप सही है –

+0

क्या आप कृपया गीथब को कोड अपलोड कर सकते हैं?मेटाडाटा सही ढंग से प्रेषित नहीं होने के साथ सर्वर की दूसरी समस्या है, लेकिन उत्तर देने में सक्षम होने के लिए दोनों नियंत्रकों और डेटाकॉन्टेक्स्ट को देखने की आवश्यकता है। – cfs

उत्तर

3

evc से ऊपर वर्णित त्रुटियों को फेंकता है, कृपया AngularJs Apps/Projects के तहत निम्न आलेख देखें। आपको नमूना परियोजनाएं मिलेंगी जिन्हें आप वास्तव में अनुसरण कर सकते हैं और AngularJs, Breeze, Asp.net Web api का उपयोग करके सीख सकते हैं। आप सही हैं, वहां बहुत सारी सामग्री है लेकिन वहां प्रभावी नहीं है। आशा करता हूँ की ये काम करेगा। http://www.learn-angularjs-apps-projects.com/

+1

यह है कि मैंने यह सब –

3

ब्रीज़ नमूने, विशेष रूप से WEB Api OData and Breeze पर एक नज़र डालें। यह angularjs + webapi + odata + wind, कोई टाइपस्क्रिप्ट नहीं है (लेकिन जावास्क्रिप्ट सिर्फ टाइपस्क्रिप्ट नहीं है :) के लिए नमूना ट्यूटोरियल है।

PM> Install-Package Breeze.Server.WebApi2 

यह आपको एक हवा बारे में पता एपीआई नियंत्रक का निर्माण और हवा OData बेनकाब आसानी से Breeze.Server.ContextProviderClass का उपयोग कर metada करने की अनुमति देगा: अपने वेब एपीआई नियंत्रकों के लिए आप निश्चित रूप से इस nuget पैकेज स्थापित करना चाहिए।

+0

शुरू किया है यदि आप ODataService.ts पर नज़दीक देखते हैं, तो यह वही कोड है जैसा आपके डेमो –

+0

लिंक प्रदान किया गया है अब –

+0

लिंक अपडेट किया गया है। –

2

इसके अलावा आप Pluralsight से उत्कृष्ट लेकिन भुगतान प्रशिक्षण की जांच भी कर सकते हैं। इसमें जावास्क्रिप्ट, कोणीय और ब्रीज़ का उपयोग करके स्क्रैच से एसपीए शामिल है।

http://www.pluralsight.com/courses/build-apps-angular-breeze

+1

यह कैसे बाउंटी प्राप्त करता है ... विज्ञापन कमीशन? – Worthy7

+0

कोई विचार नहीं, चीजें हाल ही में अजीब हो रही हैं ... –

संबंधित मुद्दे