- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
假设我们有一个客户对象,它有一个“Foo”集合。我希望我的“getCustomer”函数添加它还没有的所有 Foos,然后返回它自己,作为一个 promise ...
所以我想要一个 promise :获得一个客户,然后将所有缺失的 Foos 添加到该客户,这样当 promise 得到解决时,客户就会拥有所有缺失的 foos。
例子:
// dataservice.js
// returns Q.Promise<breeze.QueryResult>
function getCustomer(custId) {
var query = breeze.EntityQuery().from("Customers").where("CustomerId", "==", custId);
return this.em.executeQuery(query);
}
// returns Q.Promise<breeze.QueryResult>
function getFoosNotOnCustomer(customer) {
var query = breeze.EntityQuery().from("Foo").where("CustomerId", "!=", customer.Id());
return this.em.executeQuery(query);
}
我正在为如何将这些正确地“链接”在一起而苦苦挣扎,如果没有找到客户该怎么办等等。我如何修改“getCustomer”来做到这一点?我基本上是在尝试同步使用 Breeze 。这是我的尝试,但它很快变成了丑陋的嵌套代码。
// want to return Q.Promise<Customer> that has Foos loaded
// I think this is actually returning something like Q.Promise<Q.Promise<Customer>>
function getCustomer(custId) {
var query = breeze.EntityQuery().from("Customers")
.where("CustomerId", "==", custId);
return this.em.executeQuery(query) // return here?
.then(function(data) {
// what about conditionals?
if(data.results.length == 1) {
getFoosNotOnCustomer(data.results[0]).
then(function (foosArray) {
$.each(foosArray, function(i,el) {
// push foos onto customer instance
}
return custWithFoos; // return here?
}
// return something?
}
}
}
这是我最后做的:
function getCustomer(custId) {
var query = breeze.EntityQuery().from("Customers").where("CustomerId", "==", custId);
return manager.executeQuery(query) // return here?
.then(addFoos)
.then(doSomethingElse);
}
function addFoos(data) {
var myDefer = Q.Defer();
if (data && data.result.length == 1) {
var customer = data.results[0];
var query = // get FOOS Customer doesn't have;
manager.executeQuery(query).then(function (fooData) {
$.each(fooData.results function (i, el) {
customer.Foos.push(el);
});
myDefer.reslove(customer);
});
} else {
myDefer.resolve(undefined);
}
return myDefer.promise;
}
function doSomethingElse(customer) {
var myDefer = Q.Defer();
customer.SomePropert("test");
return myDefer.resovlve(customer);
}
// ----- MVVM
var custPromise = getCustomer(1).then(function (customer) {
// do something
});
最佳答案
尽管我无法理解语义,但我将以您的面值为例……尤其是我无法理解为什么让所有不属于客户的 Foos 会有帮助。
我只关注“链接”,我假设您希望调用者在您完成后接管选定的客户。
在这个例子中,我们在得到 Foos 之前等待客户
function getCustomer(custId) {
var cust;
var em = this.em;
var query = breeze.EntityQuery().from("Customers")
.where("CustomerId", "==", custId);
// On success calls `gotCustomer` which itself returns a promise
return em.executeQuery(query)
.then(gotCustomer)
.fail(handleFail); // you should handleFail
// Called after retrieving the customer.
// returns a new promise that the original caller will wait for.
// Defined as a nested success function
// so it can have access to the captured `cust` variable
function gotCustomer(data) {
cust = data.results[0];
if (!cust) {
return null; // no customer with that id; bail out now
}
// got a customer so look for non-customer foos
// returning another promise so caller will wait
return breeze.EntityQuery().from("Foos")
.where("CustomerId", "!=", custId)
.using(em).execute()
.then(gotFoos);
}
// Now you have both the customer and the other Foos;
// bring them together and return the customer.
function gotFoos(data) {
var foos = data.results;
// assume `notMyFoos` is an unmapped property that
// should hold every Foo that doesn't belong to this Customer
foos.forEach(function(f) { cust.notMyFoos.push(f); }
return cust; // return the customer to the caller after Foos arrive.
}
}
在您的场景中,您实际上不必在获取 foo 之前等待客户查询。您从一开始就知道客户和 foos 的选择标准。 假设您认为客户查询返回客户的可能性很高,您可能会同时触发两个查询,然后在两个查询完成时混合数据。考虑 Q.all
为此。
function getCustomer(custId) {
var em = this.em;
var custPromise = breeze.EntityQuery().from("Customers")
.where("CustomerId", "==", custId)
.using(em).execute();
var fooPromise = breeze.EntityQuery().from("Foos")
.where("CustomerId", "!=", custId)
.using(em).execute();
Q.all([custPromise, fooPromise])
.then(success)
.fail(handleFail); // you should handleFail
// Now you have both the customer and the "other" Foos;
// bring them together and return the customer.
// `data` is an array of the results from each promise in the order requested.
function success(data) {
var cust = data[0].results[0];
if (!cust) return null;
var foos = data[1].results;
// assume `notMyFoos` is an unmapped property that
// should hold every Foo that doesn't belong to this Customer
foos.forEach(function(f) { cust.notMyFoos.push(f); }
return cust; // return the customer to the caller after Foos arrive.
}
}
请注意,我不必在成功路径中进行如此多的空值检查。当成功回调被调用时,我保证有 data.results
。我确实必须考虑没有 Customer
和 custId
的可能性。
关于javascript - BreezeJS - 链接查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20507791/
玩breezejs。这是一个代码: var dataService = new breeze.DataService({ serviceName: "/api/
我有一个搜索字段的文本输入,然后将字符串传递给 EntityQuery。当查询包含单引号时,我会收到如下消息: 在 'substringof(O'Malley,FirstName) eq true'
我有一个带有来自数据库的导航属性的模型。模型结构如下 public class Parent{ public string propertyone {get; set;} public ILi
假设我们有一个客户对象,它有一个“Foo”集合。我希望我的“getCustomer”函数添加它还没有的所有 Foos,然后返回它自己,作为一个 promise ... 所以我想要一个 promise
假设我们有一个“父”实体“客户”和一个子实体“订单”,并且我们在子实体的上下文中,我如何在不删除订单的情况下从客户“分离”订单?基本上我会在 SQL 中做的是: update Order set Cu
我有一个 custom context provider在服务器端验证。现在我想硬删除一个客户实体及其所有子实体(地址、电子邮件等) 客户 地址 电子邮件 ... 自定义上下文提供程序是否是检查和删除
有没有办法在 Breeze JS 中处理无模式的复杂属性? 我有一个用例,我需要存储特定于客户的查找表。这些查找表可以有任意数量的列和行。我的首选解决方案是将它们存储为以下形式的 JSON 对象: {
在 BreezeJS 中与数据库交互安全吗? 例如,如果我使用以下代码,它会直接在 JavaScript 中清楚地显示数据库名称、表和查询本身。它是否与数据库建立安全连接? var manager =
我很好奇 BreezeJS 如何确定实体的哪些属性已更改并且仍然支持 IE8? 我正在构建的库需要类似的功能。 JavaScript setter/getters 将是最简单的解决方案,但 IE8 中
有没有办法让 Breeze JS 在通信失败的情况下自动重试?理想情况下,我想添加一个基于响应的中央事件处理程序,例如 401 我可以提示用户重新登录,然后重试请求,或者如果其一般连接问题为用户提供重
如何使用 BreezeJS + OData 或 WebAPI 编写复杂查询?我希望能够在 JayData 中使用 Northwind 作为引用数据库做这样的事情?我的问题是我不知道如何表达同时引用数据
我有一个名为 Item 的类,它由 PeriodId 过滤。有很多时期——但我们一次只需要看一个。我想向用户展示初始数据加载(例如,PeriodId==1 的位置)。然后我希望用户能够查询/过滤其他时
如果我有一个包含两个数字列(例如 X 和 Y)的表,并且需要检索其中 X > Y 的行。如何使用 BreezeJS 实现此目的?到目前为止,我遇到的所有示例都只能将列与固定值进行比较。 编辑:我尝试使
给定任何 BreezeJs 实体,如何确定它与其导航属性的关系 - 即它是否具有 1 对 1、1 对 0 或 1、1 对 n 等关系? 最佳答案 使用getProperty检索属性的 info 。当是
我正在寻找一种编写 Breeze 实体查询的方法,该查询允许我获取由特定属性区分的前 10 个实体。 这个 LINQ 片段大致描述了我想要做的事情: repo.Foos() .GroupBy(
我是 BreezeJS 新手,想知道是否有任何有关如何将 Breeze 与 SQL 存储过程结合使用的示例? 我们有一些非常复杂的查询,并且希望能够通过 SP 调用它们。另外,我们如何告诉 Breez
我正在使用带有 Breeze 和 Angular 的 MVC 4。 我已经创建了一些域模型,我只想显示模型列表。这是我的代码: API Controller : [BreezeController]
背景:我正准备开始一个需要移动优先的项目。我在客户端使用 AngularJS,在数据库中使用 SQL,在通信中使用 .net WEBApi2。我已经阅读了有关 BreezeJS 的信息,并且想将其用作
我一直在尝试使用 Breezejs 和 WebAPI OData Controller 发布一个实体。 配置如下: config.Routes.MapODataRoute( routeName: "o
最近我们将后端 web api 从 .Net 4.61 升级到 .Net Core 2.0,我们正在使用 Breezejs,我们对此很满意,升级后我们遇到了两个无法在线找到答案的问题: 用 did 升
我是一名优秀的程序员,十分优秀!