. Запросы Breeze возвращают объект, содержащий результаты, информацию о запросе, номер строки и XHR. Но, насколько я видел, nextLink не фиксируется, когда служба OData настроена на возврат данных на нескольких страницах. Есть ли способ отправить запрос nextLink, используя результат предыдущего запроса, вместо создания запроса с помощью пропустить и принять?Использование Breeze с поддержкой подкачки на стороне сервера. Услуги OData.
ответ
Я уверен, что ответ заключается в том, что он не поддерживает это в настоящее время. Возможно, @wardbell может перезвонить. В то время как Breeze разработан, чтобы работать «хорошо» с OData как базовым типом сервиса, он не должен полностью соответствовать спецификации OData и всем ее функциям. Это действительно просто использование OData в качестве стандартизованного протокола для основанных на сервисах шаблонов CRUD, которые он может использовать на вершине.
Но подкачка на стороне сервера важна в OData, поэтому, надеюсь, они могут добавить поддержку для этого в какой-то момент.
Если посмотреть на Поддерживающие OData запрос на MSDN
http://www.asp.net/web-api/overview/odata-support-in-aspnet-web-api/supporting-odata-query-options
Прокрутка вниз к серверу Driven Страницы тему, и вы увидите, что если вы украшаете свой Приобретайте в контроллере с [Queryable (PAGESIZE = 10)] атрибут, возвращенный в формате JSON включает в себя
[Queryable(PageSize=10)]
public IQueryable<Product> Get()
{
return products.AsQueryable();
}
возвращается
{
"odata.metadata":"http://localhost/$metadata#Products",
"value":[
{ "ID":1,"Name":"Hat","Price":"15","Category":"Apparel" },
{ "ID":2,"Name":"Socks","Price":"5","Category":"Apparel" },
// Others not shown
],
"odata.nextLink":"http://localhost/Products?$skip=10"
}
, который вы должны использовать, чтобы получить следующую страницу. В вашей dataservice.js на вашей странице результатом будет ваш JSON.
Вы должны иметь возможность использовать .skip в параметрах запроса.
var getProducts = function (callback) {
// get pageNumber from the viewModel
var pageNumber = window.app.vm.Products.pageNumber();
// ditto pageSize
var pageSize = window.app.vm.Products.pageSize();
// set up your query
var query4 = EntityQuery.from("Products")
.orderBy("ProductName")
.skip(pageNumber * pageSize)
.take(pageSize);
}
// execute the query returning the promise from breeze and q
// when the promise resolves, get the data and act on it
return manager.executeQuery(query4)
.then(function (data) {
// set your viewModel ko.observableArray to the returned items
window.app.vm.products.products(data.odata.value);
// set your viewModel ko.observable to the pageNumber window.app.vm.products.pageNumber(data.odata.nextlink.substring(indexOf("skip=") + 1)/pageSize);
})
.fail(queryFailed);
Я просто написал этот код с верхней части моей головы, так что вам нужно будет проверять возвращаемые данные как в браузере F12 и в dataservice.js, чтобы убедиться, что вы правильно разборе из значения пропускаемого , Мой код может быть ошибочным, потому что я не выгружал данные в свой SPA. Я просто предлагаю это как подход.
В моем методе viewModel.activate() я бы сделал что-то вроде этого.
app.vm.products = (function ($, ko, dataservice, router) {
var products = ko.observableArray();
var pageNumber = ko.observable(1);
var pageSize = ko.observable(10);
var initialized = false; // private
var activate = function (routeData, callback) {
if (initialized) {
return;
}
initialized = true;
dataservice.getProducts();
// I do not think you will have an async timing issue here because the
// get of the pageNumber happens before the ajax call
// which would be the major source of latency.
// If you run into a problem with it updating too quickly you can start with
// page number 0, or put the increment in a callback from the dataservice
// method.
pageNumber(pageNumber() + pageSize);
},
...
return {
activate: activate,
products: products
};
})($, ko, app.dataservice, app.router);
Как я уже сказал, я написал этот код в ответ и не проверял, но это должно дать вам достаточно, чтобы определить самое лучшее для вашего приложения.
- 1. ASP.NET WebAPI OData на стороне сервера подкачки
- 2. Breeze - Create Entity на стороне сервера
- 3. jqgrid Java на стороне сервера подкачки
- 4. OData V4 изменить $ фильтр на стороне сервера
- 5. Ошибка Breeze OData
- 6. Использование Angular with Breeze и OData
- 7. Использование Breeze для произвольного ответа сервера
- 8. OData - Breeze - Пользовательский запрос
- 9. Breeze 1.3.5 с OData и мореходства свойства
- 10. Odata webv api Подкачка сервера на стороне сервера
- 11. Использование Wordcram на стороне сервера
- 12. использование ожидания на стороне сервера
- 13. Возможности пользовательской сортировки Flex с поддержкой на стороне сервера
- 14. Использование CAPICOM на стороне сервера
- 15. субъект клиента breeze, не обновляющийся после изменений на стороне сервера
- 16. Проверка на стороне сервера w/Breeze JS и пользовательский EFContextProvider
- 17. Изменения на стороне сервера на стороне сервера на стороне сервера
- 18. Пользовательская проверка на клиентской стороне Breeze с данными на стороне сервера
- 19. Услуги OData с Эластическим поиском
- 20. Использование маршрутов с requirejs на стороне сервера
- 21. jqGrid - На стороне сервера подкачки - jsonstring - показывая неправильный/нет данных
- 22. OData услуги в ASP.Net
- 23. Breeze & OData: Проблема расширения коллекции
- 24. Can Breeze WebAPI открыть ODATA
- 25. Breeze OData - Вставка и обновление
- 26. Breeze работы с Web API OData
- 27. Невозможно инициализировать OData. с Breeze, необходимо поддерживать удаленные службы OData
- 28. Ошибка на стороне клиента на стороне сервера На стороне сервера Использование Angular JS
- 29. Услуги REST и Xpages Проверка на стороне сервера
- 30. Breeze/OData вызова FetchEntityByKey делает использование фильтра (EntitySetController.GetEntityByKey не используется)
Спасибо за все усилия. Я только начал играть с Breeze и хочу знать, есть ли встроенная поддержка обработки серверного подкачки. Как заявил Брайан Нойс, нет встроенной поддержки. Поэтому мы должны обрабатывать вещи вручную. Я понял подход, который вы пробовали здесь, я обязательно попробую. Я хотел бы знать, планирует ли команда Бриз включить эту функцию в свою будущую версию. –