2013-03-20 23 views
6

Làm việc với gió được hỗ trợ bởi SharePoint, như được mô tả here và sử dụng TypeScript thay vì JS.Tại sao thực thểAspect của các mục truy vấn của tôi là rỗng?

Trong một lớp DataService tôi tạo ra một EntityManager và thực thi một truy vấn:

private servicePath: string = '/api/PATH/'; 
private manager: breeze.EntityManager; 

constructor() { 
    this.init(); 
} 

private init(): void { 
    this.manager = new breeze.EntityManager(this.servicePath); 
} 

public ListResponses(): breeze.Promise { 
    var query = breeze.EntityQuery.from("Responses"); 
    return this.manager.executeQuery(query); 
} 

sau đó tôi gọi đây là từ mô hình của tôi xem, trong đó hoạt động tốt:

private loadResponses(): void { 
    this.dataservice.ListResponses().then((data) => { 
     this.handleResponsesLoaded(data); 
    }).fail((error) => { 
     this.handleDataError(error); 
    }); 
} 

private handleResponsesLoaded(data:any): void { 
    for (var i = 0; i < results.length; i++){ 
     this.extendItem(results[i]); 
    } 
    this.renderList(results, "#tp-responses-list"); 
} 

Nhưng nỗ lực của tôi để mở rộng mỗi mục không thành công, vì mục của entityAspect là không:

private extendItem(item: any): void { 
    item.entityAspect.propertyChanged.subscribe(() => { // FAILS HERE 
     setTimeout(() => { 
      if (item.entityAspect.entityState.isModified()) { 
       this.dataservice.SaveChanges().then((result) => { 
        tracer.Trace("SaveChanged Result: " + result); 
       }).fail((error) => { 
        this.handleDataError(error); 
       }); 
      } 
     }, 0); 
    }); 
} 

Khi tôi nspecting mục kết quả, tôi có thể thấy nó chỉ là đối tượng đồng bằng dữ liệu, với tất cả các tài sản tôi mong chờ nhưng không có sự tốt lành Entity:

enter image description here

Tôi vừa mới bắt đầu với gió, vì vậy cách tốt nhất để đặt câu hỏi có lẽ là: tôi đã làm gì sai ở đây?

Trả lời

5

Nếu Breeze không thể tìm thấy loại đối sánh trong siêu dữ liệu trong loại siêu dữ liệu mà nó nhận được do truy vấn, nó chỉ trả về đối tượng json "thô".

Lý do mà siêu dữ liệu của bạn không có sẵn thường là do một trong hai cách giải thích:

1) You are not serializing loại thông tin trong câu trả lời truy vấn. Thuộc tính [BreezeController] hoặc thuộc tính [BreezeJsonFormatter] đều thực hiện điều này.

2) Bản thân truy vấn không trả về các loại siêu dữ liệu được mô tả. Bạn có thể tạo siêu dữ liệu trực tiếp trên máy khách trong trường hợp này hoặc trả về siêu dữ liệu từ máy chủ thông qua phương thức "Siêu dữ liệu". (xem ví dụ NoDb trong gói Breeze Zip để xem ví dụ đầu tiên).

Bạn cũng có thể xem JsonResultsAdapter nếu bạn muốn ép buộc bất kỳ kết quả truy vấn nào thành loại siêu dữ liệu "đã biết", nhưng thường không cần thiết nếu bạn đang sử dụng thuộc tính [BreezeController].

Hy vọng điều này sẽ hữu ích.

+0

Jay - Cảm ơn bạn đã trả lời nhanh chóng. Tôi đang sử dụng siêu dữ liệu được trích xuất từ ​​edmx của tài liệu tham khảo dịch vụ, nhưng phải có điều gì đó sai - Tôi sẽ cố khắc phục sự cố (tôi có nhiều loại thực thể và tôi không muốn áp dụng siêu dữ liệu theo cách thủ công trong khách hàng nếu tôi có thể giúp nó). Do đó, việc theo dõi nhanh chóng: loại so khớp dễ dàng với siêu dữ liệu như thế nào? Nó dựa trên tên loại hoặc trên bản đồ các thuộc tính như một giao diện hay ...? – JcFx

+0

bạn có thể nhận danh sách các loại siêu dữ liệu chứa trong phương thức getEntityTypes của nó. Mỗi loại thực thể có một 'tên' và một tài sản 'shortName', hoặc có thể được kết hợp. –

+0

Tôi sẽ xem xét điều đó vào buổi sáng. Cảm ơn một lần nữa. – JcFx

2

Câu trả lời sau đây không phải của tôi, mà là của OP. Nó đã được đăng trong câu hỏi chính nó, trong khi nó cần phải có một câu trả lời.


Vấn đề là không gian tên không khớp. Tôi đang trích xuất siêu dữ liệu từ một edmx được tạo bởi một tham chiếu dịch vụ Visual Studio. Edmx này sử dụng không gian tên của dịch vụ mà nó đang gọi. Các đối tượng proxy của tôi nằm trong một không gian tên khác. Tra cứu thực thể của Breeze (thậm chí sử dụng tên viết tắt) có định dạng Type # Namespace, và vì vậy tôi không nhận được kết quả phù hợp nào. Tôi đã chỉnh sửa phương thức BuildJsonMetadata tùy chỉnh của mình trên máy chủ để trao đổi các không gian tên và giờ đây tôi đã có các thực thể được trang trí đúng cách hoạt động chính xác.

Các vấn đề liên quan