Breeze 项目 - 已删除空字段
Breeze Project - Null Fields Removed
如果我运行一个breeze投影查询:
var item;
breeze.EntityQuery
.from("SomeTable")
.where("Id", "==", id)
.select("A, B, C, D")
.using(myEntityManager).execute()
.then(function(data) { item = ko.observable(data.results[0]); });
并假设 table 中的行 B 和 C 为 NULL,我将返回一个没有 B 和 C 的 object。
{
A: "somevalue",
B: "someothervalue"
}
在 UI 我有:
<div data-bind="with: item">
<span data-bind="text: A" />
<span data-bind="text: B" />
<span data-bind="text: C" />
<span data-bind="text: D" />
</div>
然后我得到错误 -
ReferenceError: Unable to process binding "with: function(){return
item}" Message: Unable to process binding "text:
function(){return B}"
Message: 'B' is undefined
我错过了什么吗?如何在结果中获取值为空的 B 和 C?
这是您的情况,以 Northwind sample database that is available for interactive testing at http://learn.breezejs.com/
为蓝本
var myEntityManager = new breeze.EntityManager('api/northwind');
function Employee() {
this.FirstName = ko.observable(null);
this.LastName = ko.observable(null);
}
Employee.prototype.init = function (data) {
if (data) {
this.FirstName(data.FirstName);
this.LastName(data.LastName);
} else {
this.FirstName(null);
this.LastName(null);
}
};
Employee.prototype.loadFromId = function (id) {
var self = this;
breeze.EntityQuery.from("Employees")
.where("EmployeeId", "==", id)
.select("FirstName, LastName")
.using(myEntityManager).execute()
.then(function (data) {
self.init(data.results[0]);
})
.fail(function () {
self.init(null);
// also show or log error message
});
};
用法:
var viewModel = new Employee();
viewModel.loadFromId(1);
ko.applyBindings(viewModel);
关键是你需要一个实际的视图模型首先。您不是在编写 breeze 代码,而是在编写 Knockout 代码,而 Breeze 只是用数据填充视图模型的一种方式。
因此,如果您的视图需要属性 A
、B
、C
和 D
,您需要先创建一个提供它们的视图模型。确保您的视图适用于空视图模型。只有在那之后你才能转向用数据填充它们的任务。
如果我运行一个breeze投影查询:
var item;
breeze.EntityQuery
.from("SomeTable")
.where("Id", "==", id)
.select("A, B, C, D")
.using(myEntityManager).execute()
.then(function(data) { item = ko.observable(data.results[0]); });
并假设 table 中的行 B 和 C 为 NULL,我将返回一个没有 B 和 C 的 object。
{
A: "somevalue",
B: "someothervalue"
}
在 UI 我有:
<div data-bind="with: item">
<span data-bind="text: A" />
<span data-bind="text: B" />
<span data-bind="text: C" />
<span data-bind="text: D" />
</div>
然后我得到错误 -
ReferenceError: Unable to process binding "with: function(){return item}" Message: Unable to process binding "text: function(){return B}" Message: 'B' is undefined
我错过了什么吗?如何在结果中获取值为空的 B 和 C?
这是您的情况,以 Northwind sample database that is available for interactive testing at http://learn.breezejs.com/
为蓝本var myEntityManager = new breeze.EntityManager('api/northwind');
function Employee() {
this.FirstName = ko.observable(null);
this.LastName = ko.observable(null);
}
Employee.prototype.init = function (data) {
if (data) {
this.FirstName(data.FirstName);
this.LastName(data.LastName);
} else {
this.FirstName(null);
this.LastName(null);
}
};
Employee.prototype.loadFromId = function (id) {
var self = this;
breeze.EntityQuery.from("Employees")
.where("EmployeeId", "==", id)
.select("FirstName, LastName")
.using(myEntityManager).execute()
.then(function (data) {
self.init(data.results[0]);
})
.fail(function () {
self.init(null);
// also show or log error message
});
};
用法:
var viewModel = new Employee();
viewModel.loadFromId(1);
ko.applyBindings(viewModel);
关键是你需要一个实际的视图模型首先。您不是在编写 breeze 代码,而是在编写 Knockout 代码,而 Breeze 只是用数据填充视图模型的一种方式。
因此,如果您的视图需要属性 A
、B
、C
和 D
,您需要先创建一个提供它们的视图模型。确保您的视图适用于空视图模型。只有在那之后你才能转向用数据填充它们的任务。